基于pomelo的小游戲開發(fā)_第1頁
基于pomelo的小游戲開發(fā)_第2頁
基于pomelo的小游戲開發(fā)_第3頁
基于pomelo的小游戲開發(fā)_第4頁
基于pomelo的小游戲開發(fā)_第5頁
已閱讀5頁,還剩49頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、基于pomelo的小游戲開發(fā)suwenkuang 今天要講的內(nèi)容nodejs介紹pomelo介紹開發(fā)實例-撿寶Demo開發(fā)實例-坦克大戰(zhàn)nodejs介紹什么是什么是NodeJS? 第一眼看到這個詞,估計你和我一樣,以為它不過是一個JavaScript框架吧?其實不是的, NodeJS基于V8引擎的,使用事件驅(qū)動模型而不是復(fù)雜的多線程來獲得可伸縮性,類似Ruby的EventMachine和Python的Twisted的輕量級WebServer。 是不是很有意思?嗯,如果這東東真的可用,那就是說,以后前端后端都可以都用JavaScript來編程了,這對于JS程序員來說,真是一個莫大的福音,因為你們

2、可以翻身做后端了。nodejs介紹Node是一個是一個Javascript運行環(huán)境運行環(huán)境(runtime)。 實際上它是對Google V8引擎(應(yīng)用于Google Chrome瀏覽器)進行了封裝。V8引擎執(zhí)行Javascript的速度非??欤阅芊浅:?。Node對一些特殊用例進行了優(yōu)化,提供了替代的API,使得V8在非瀏覽器環(huán)境下運行得更好。例如,在服務(wù)器環(huán)境中,處理二進制數(shù)據(jù)通常是必不可少的,但Javascript對此支持不足,因此,V8.Node增加了Buffer類,方便并且高效地處理二進制數(shù)據(jù)。因此,Node不僅僅簡單的使用了V8,還對其進行了優(yōu)化,使其在各環(huán)境下更加給力。nodej

3、s介紹V8引擎本身使用了一些最新的編譯技術(shù)引擎本身使用了一些最新的編譯技術(shù)。 這使得用Javascript這類高級語言編寫出來的代碼與用C這類低級語言寫出來的代碼性能相差無幾,卻節(jié)省了開發(fā)成本。對性能的苛求是Node的一個關(guān)鍵因素。 Javascript是一個事件驅(qū)動語言,Node利用了這個優(yōu)點,編寫出可擴展性高的服務(wù)器。Node采用了一個稱為“事件循環(huán)(event loop)”的架構(gòu),使得編寫可擴展性高的服務(wù)器變得既容易又安全。提高服務(wù)器性能的技巧有多種多樣。Node選擇了一種既能提高性能,又能減低開發(fā)復(fù)雜度的架構(gòu)。這是一個非常重要的特性。并發(fā)編程通常很復(fù)雜且布滿地雷。Node繞過了這些,但

4、仍提供很好的性能。nodejs介紹Node采用一系列采用一系列“非阻塞非阻塞”庫來支持事件循環(huán)的方式庫來支持事件循環(huán)的方式。 本質(zhì)上就是為文件系統(tǒng)、數(shù)據(jù)庫之類的資源提供接口。當你向文件系統(tǒng)發(fā)送一個請求時,無需等待硬盤(尋址并檢索文件),硬盤準備好的時候非阻塞接口會通知Node。該模型以可擴展的方式簡化了對慢資源的訪問,直觀,易懂。尤其是對于熟悉onmouseover、onclick等DOM事件的用戶,更有一種似曾相識的感覺。 雖然讓Javascript運行于服務(wù)器端不是Node的獨特之處,但卻是其一強大功能。不得不承認,瀏覽器環(huán)境限制了我們選擇編程語言的自由。任何服務(wù)器與日益復(fù)雜的瀏覽器客戶端

5、應(yīng)用程序間共享代碼的愿望只能通過Javascript來實現(xiàn)。雖然還存在其他一些支持Javascript在服務(wù)器端運行的平臺,但因為上述特性,Node發(fā)展迅猛,成為事實上的平臺。nodejs介紹。單線程。單線程。非阻塞式。非阻塞式IO。V8執(zhí)行引擎執(zhí)行引擎。事件驅(qū)動。事件驅(qū)動nodejs介紹uvlibeiolibev事件庫C模塊Javascript模塊netbufferchild_processfilehttphttpsfsutilnodejs介紹出眾的性能出眾的性能 單線程的性能優(yōu)勢nodejs介紹出眾的性能出眾的性能 非阻塞的并發(fā)優(yōu)勢nodejs介紹nodejs介紹nodejs介紹長連接支持

6、能力長連接支持能力5臺C1設(shè)備可支持PV上千萬的朋友網(wǎng)長連接業(yè)務(wù)8核8G可維持13萬個長連接,理論峰值可到50Wnodejs介紹單線程的先天不足單線程的先天不足 操控多CPU的短板 -單線程程序只能在一個CPU上運行可靠性 -一個異常影響整個線程單線程、可靠性低、性能高單線程、可靠性低、性能高多線程,可靠性高,性能低多線程,可靠性高,性能低nodejs介紹簡單的簡單的helloworld nodejs介紹此腳本導(dǎo)入sys和http模 塊,并創(chuàng)建了一個HTTP服務(wù)器。傳遞給http.createServer的匿名函數(shù),將在每請求到來時被調(diào)用。服務(wù)器被創(chuàng) 建之后,它會監(jiān)聽端口8124。當請求到來時

7、,我們首先發(fā)送包含內(nèi)容類型和狀態(tài)代碼200(表示成功)的HTTP協(xié)議頭。然后,發(fā)送“Hello World!”并關(guān)閉連接。您可能會注意到,必須顯式的關(guān)閉連接。發(fā)送流數(shù)據(jù)到客戶端后忘記關(guān)閉連接是個很常見的錯誤。如果你運行這個腳本,到http:/localhost:8124/在 瀏覽器中,你將看到“Hello World!”pomelo介紹什么是什么是pomelo? Pomelo 是基于 Node.js 的高性能、分布式游戲服務(wù)器框架。它包括基礎(chǔ)的開發(fā)框架和相關(guān)的擴展組件(庫和工具包),可以幫助你省去游戲開發(fā)枯燥中的重復(fù)勞動和底層邏輯的開發(fā)。Pomelo 不但適用于游戲服務(wù)器開發(fā), 也可用于開發(fā)高

8、實時 Web 應(yīng)用,它的分布式架構(gòu)可以使 Pomelo 比普通的實時 Web 框架擴展性更好。pomelo介紹為什么使用為什么使用pomelo?高并發(fā)、高實時的游戲服務(wù)器的開發(fā)是很復(fù)雜的工作。跟 web 應(yīng)用一樣, 一個好的開源容器或開發(fā)框架可以大大減少游戲開發(fā)的復(fù)雜性,讓開發(fā)變得更加容易。遺憾的是目前在游戲服務(wù)器開發(fā)領(lǐng)域一直沒有太好的開源解決方案。 pomelo 填補了這個空白,pomelo 的優(yōu)勢有以下幾點:架構(gòu)的可伸縮性好。 采用多進程單線程的運行架構(gòu),擴展服務(wù)器非常方便, node.js 的網(wǎng)絡(luò) io 優(yōu)勢提供了高可伸縮性。使用非常容易, 開發(fā)模型與web應(yīng)用的開發(fā)類似,基于 conv

9、ention over configuration 的理念, 幾乎零配置, api 的設(shè)計也很精簡, 很容易上手??蚣艿乃神詈虾涂蓴U展性好, 遵循 node.js 微模塊的原則, framework 本身只有很少的代碼,所有 component、庫、工具都可以用 npm module 的形式擴展進來。任何第三方都可以根據(jù)自己的需要開發(fā)自定義 module。提供完整的開源 MMO 游戲 demo 參考,一個超過1萬行代碼的游戲 demo,使開發(fā)者可以隨時借鑒 demo 的設(shè)計與開發(fā)思路。pomelo介紹pomelo使用現(xiàn)狀使用現(xiàn)狀Realtime application網(wǎng)易消息推送平臺,已上線中

10、國平安客服系統(tǒng)GamesN款移動網(wǎng)絡(luò)游戲正在開發(fā)中pomelo介紹pomelo特性特性 快速、易上手的游戲開發(fā)模型和api高可伸縮的多進程架構(gòu), 支持MMO的場景分區(qū)和其它各類分區(qū)策略方便的服務(wù)器擴展機制,可快速擴展服務(wù)器類型和數(shù)量方便的請求、響應(yīng)、廣播、服務(wù)器通訊機制, 無需任何配置注重性能,在性能、可伸縮性上做了大量的測試、優(yōu)化提供了較多擴展組件,包括游戲開發(fā)常用的庫和工具包提供了完整的MMO demo代碼(客戶端html5),可以作為很好的開發(fā)參考基于socket.io開發(fā),支持socket.io支持的多種語言客戶端pomelo介紹Pomelo的組成架構(gòu)如圖所示:的組成架構(gòu)如圖所示:po

11、melo介紹pomelo的架構(gòu)設(shè)計目標:的架構(gòu)設(shè)計目標: 服務(wù)器(進程)的抽象與擴展在 web 應(yīng)用中, 每個服務(wù)器是無狀態(tài)、對等的, 開發(fā)者無需通過框架或容器來管理服務(wù)器。 但游戲應(yīng)用不同, 游戲可能需要包含多種不同類型的服務(wù)器,每類服務(wù)器在數(shù)量上也可能有不同的需求。這就需要框架對服務(wù)器進行抽象和解耦,支持服務(wù)器類型和數(shù)量上的擴展。 客戶端的請求、響應(yīng)、廣播客戶端的請求、響應(yīng)與 web 應(yīng)用是類似的, 但框架是基于長連接的, 實現(xiàn)模式與 http 請求有一定差別。 廣播是游戲服務(wù)器最頻繁的操作, 需要方便的 API, 并且在性能上達到極致。 服務(wù)器間的通訊、調(diào)用盡管框架盡量避免跨進程調(diào)用,但

12、進程間的通訊是不可避免的, 因此需要一個方便好用的 RPC 框架來支撐。 松耦合、可插拔的應(yīng)用架構(gòu)。應(yīng)用的擴展性很重要, pomelo framework 支持以 component 的形式插入任何第三方組件, 也支持加入自定義的路由規(guī)則, 自定義的 filter 等。pomelo介紹1、前端服務(wù)器的職責:負責承載客戶端請求的連接維護session信息把請求轉(zhuǎn)發(fā)到后端把后端需要廣播的消息發(fā)到前端2、后端服務(wù)器職責:處理業(yè)務(wù)邏輯, 包括RPC和前端請求的邏輯把消息推送回前端服務(wù)器的抽象與分類服務(wù)器的抽象與分類該架構(gòu)把游戲服務(wù)器做了抽象, 抽象成為兩類:前端服務(wù)器和后端服務(wù)器, 如圖:pomelo

13、介紹圖中的connector, area, chat三個目錄代表三類服務(wù)器類型, 每個目錄下的handler與remote決定了這個服務(wù)器的行為(對外接口)。 開發(fā)者只要往handler與remote目錄填代碼, 就可以實現(xiàn)某一類的服務(wù)器。這讓服務(wù)器實現(xiàn)起來非常方便。服務(wù)器抽象的實現(xiàn)服務(wù)器抽象的實現(xiàn)利用目錄結(jié)構(gòu)與服務(wù)器對應(yīng)的形式, 可以快速實現(xiàn)服務(wù)器的抽象。pomelo介紹服務(wù)器抽象服務(wù)器抽象的實現(xiàn)的實現(xiàn)填一份配置文件servers.json就可以讓服務(wù)器快速動起來。配置文件內(nèi)容如下所示:pomelo介紹客戶端請求與響應(yīng)、廣播的抽象介紹客戶端請求與響應(yīng)、廣播的抽象介紹所有的web應(yīng)用框架都實現(xiàn)

14、了請求與響應(yīng)的抽象。盡管游戲應(yīng)用是基于長連接的, 但請求與響應(yīng)的抽象跟web應(yīng)用很類似。下圖的代碼是一個request請求示例:請求的api與web應(yīng)用的ajax請求很象,基于Convention over configuration的原則, 請求不需要任何配置。 pomelo介紹客戶端請求與響應(yīng)、廣播的抽象介紹客戶端請求與響應(yīng)、廣播的抽象介紹所有的web應(yīng)用框架都實現(xiàn)了請求與響應(yīng)的抽象。盡管游戲應(yīng)用是基于長連接的, 但請求與響應(yīng)的抽象跟web應(yīng)用很類似。下圖的代碼是一個request請求示例:請求的api與web應(yīng)用的ajax請求很象,基于Convention over configurat

15、ion的原則, 請求不需要任何配置。 pomelo介紹服務(wù)器間服務(wù)器間RPC調(diào)用的抽象介紹調(diào)用的抽象介紹架構(gòu)中各服務(wù)器之間的通訊主要是通過底層RPC框架來完成的,該RPC框架主要解決了進程間消息的路由和RPC底層通訊協(xié)議的選擇兩個問題。服務(wù)器間的RPC調(diào)用也實現(xiàn)了零配置。實例如下圖所示:pomelo介紹pomelo支持可插拔的支持可插拔的component擴展架構(gòu)擴展架構(gòu)component是pomelo自定義組件,開發(fā)者可自加載自定義的component。 component在pomelo框架參考將有更深入的討論。以下是component的生命周期圖用戶只要實現(xiàn)component相關(guān)的接口:

16、start, afterStart, stop, 就可以加載自定義的組件:app.load(name, comp, opts)開發(fā)實例撿寶撿寶Demo玩家在單一場景中檢取寶物,獲得積分支持多玩家實時記錄并刷新積分開發(fā)實例-撿寶Demo撿寶撿寶Demo開發(fā)實例-撿寶Demo搭建搭建Demo 初始化Pomelo項目 構(gòu)建場景服務(wù) 使用Pomelo進行通信 服務(wù)架構(gòu)擴展和分析開發(fā)實例-撿寶Demo初始化工程初始化工程 安裝pomelo 初始化工程開發(fā)實例-撿寶Demo服務(wù)端目錄結(jié)構(gòu)服務(wù)端目錄結(jié)構(gòu)Connector 服務(wù)器服務(wù)器服務(wù)端代碼服務(wù)端代碼配置文件配置文件服務(wù)端入口服務(wù)端入口客戶端代碼客戶端代

17、碼開發(fā)實例-撿寶Demo編寫場景服務(wù)編寫場景服務(wù) 場景是游戲世界在服務(wù)端的抽象 場景地圖 人物 寶物 游戲可以很復(fù)雜,也可以很簡單 在撿寶 demo中,場景就是游戲地圖、玩家和其中的寶物開發(fā)實例-撿寶Demo編寫場景服務(wù)編寫場景服務(wù)Driven這些服務(wù)要在哪里運行呢?這些服務(wù)要在哪里運行呢?開發(fā)實例-撿寶Demo加入新的服務(wù)器類型加入新的服務(wù)器類型開發(fā)實例-撿寶Demo啟動場景服務(wù)啟動場景服務(wù) 服務(wù)端,寫完了? 等會兒,客戶端還沒收到信兒呢?開發(fā)實例-撿寶DemoPomelo中的通信機制中的通信機制 Request/Response模式 請求/響應(yīng)模型 1 to 1 廣播模式 服務(wù)端對客戶端

18、1 to N 服務(wù)端之間的RPC調(diào)用開發(fā)實例-撿寶Demo客戶端與服務(wù)端通信客戶端與服務(wù)端通信 Handler/Request模式開發(fā)實例-撿寶Demo與客戶端的通信與客戶端的通信 通過Channel來推送消息開發(fā)實例-撿寶Demo服務(wù)器之間的通訊服務(wù)器之間的通訊開發(fā)實例-撿寶Demo服務(wù)端架構(gòu)服務(wù)端架構(gòu)開發(fā)實例-撿寶DemoPomelo的擴展支持的擴展支持 說好的分布式架構(gòu)呢? 前端服務(wù)器擴展 讓我們加入更多的Connectors 場景服務(wù)器擴展 加入更多場景 客戶端的擴展 支持更多類型的客戶端開發(fā)實例-撿寶Demo擴展擴展Connector 加入多臺connectors 連接分配問題 負載均衡 負載均衡服務(wù)器開發(fā)實例-撿寶Demo擴展場景服務(wù)擴展場景服務(wù) 加入新的場景服務(wù)器 重寫路由算法開發(fā)實例-撿寶Demo分布式的服務(wù)器架構(gòu)分布式的服務(wù)器架構(gòu)開發(fā)實例-撿寶DemoProto壓縮壓縮 Config:開發(fā)實例-撿寶DemoserverProtos.json開發(fā)實例-坦克大戰(zhàn)需求分析需求分析玩法操作方法:使用箭頭鍵()控制方向 ,使用A鍵發(fā)彈移動方式: 坦克只能朝上下左右四個方向移動,最小移動單位是1/2格(地圖是格子地圖),坦克的發(fā)彈方向與前進向一致。地圖特點:地圖是格子地圖,地形最小單位為一個格子:是否可通行/是否可摧毀 (磚墻,鋼墻)/是否可隱蔽

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論