erlang 百科
協議包含通訊協議和資料格式.
通訊協議目前常用的是:http和tcp.其有各自的特點根據遊戲的特點而進行選擇.
http比較成熟,使用極其廣泛.具有豐富的基礎軟體和工具.
對於簡單的social game可以使用http作為通訊協議.
這類遊戲對實時性要求不是很高,使用http也很容易做到效能擴充套件,可以較好的滿足需求.
如果遊戲前端使用html+js開發,那麼只能使用http了,需要較好的互動性和實時性時,只能
使用http長輪詢來實現了.如果前端使用flash開發,遊戲互動複雜,實時性要求高,那麼http
便不合適了.
tcp文字格式,比如xml,json或自定義均可作為傳輸的資料格式,文字格式最大的好處是可讀,
便於除錯,缺點是資料量比較大,冗餘資訊太多.(當然可以通過壓縮來彌補).因此在web
game中很少使用文字作為資料傳輸格式.
除卻文字就是二進位制協議了.二進位制協議也分多種:protobuf,thrift等通用二進位制傳輸協議和
自定義二進位制格式.使用protobuf和thrift的好處是通用性,多種語言均支援,再乙個規模比較
大,使用多種開發語言的環境中比較合適.作為web game,通常是乙個工作室負責一款產品,
client和server使用的技術和語言相對確定,因此這些通用二進位制傳輸協議就不是最好的選擇,
同時,其因為通用,也導致了一些效能下降.
目前大部分遊戲是採用自定義二進位制協議,基本結構為:頭部幾個位元組表示資料體長度,隨後為
資料體.在資料體中,可以劃分出幾個位元組(如2個)表示某種訊息.我們會為每種訊息都定義資料
格式. 其大致的樣子如下: [2位元組資料長度][2位元組訊息型別,具體的訊息體].
再erlang中實現這樣的協議非常簡單, 設定inet:setopts/2的 packet選項為2,便可支援我們上面
的協議.erlang自動會首先獲取2個位元組,作為長度,隨後繼續接受資料,知道這個包接收完成,
省去了我們自己處理解包,粘包的痛苦 :)(注意2個自己使用無符號的big-endian編碼方式).
有了資料體,接下來需要處理2個位元組的訊息型別,erlang還提供了乙個貼心的選項:(注意這個選項只有在socket設定binary選項的時候有效).再這裡我們設定,這樣我們收到的資料體,不是一整塊,而是這樣:[byte1, byte2 | binary],byte1,byte2是erlang為我們截取出的資料體的頭2個位元組. 對於熟悉erlang的朋友,我提乙個問題:
這個資料是格式規則的列表麼?答案是no,這個列表是乙個"畸形"的列表,因為其最後乙個元素不是列表.有些繞遠了... :(
還有,在erlang中tcp,擁有乙個active選項,其取值為:true, false, once.看過書的都明白,其是用來控制tcp資料的接收方式.通過使用 inet:setopts(sock, ),我們可以讓資料乖乖的聽話,主動發給我們乙個資料,然後變不主動,我們處理完這個訊息後,然後在設定active once,其繼續再發給我們乙個資料. 這樣的好處是,不會因為,給我們傳送了大量的資料,導致我們應接不暇.也不會讓我們每次都手動 gen_tcp:recv/2資料,那麼累人.
最後就是要動手,首先把網路和協議搞定,遊戲之路就開始了 :)
Erlang遊戲開發 協議
協議包含通訊協議和資料格式.通訊協議目前常用的是 http 和tcp 其有各自的特點根據遊戲的特點而進行選擇.http比較成熟,使用極其廣泛.具有豐富的基礎軟體和工具.對於簡單的social game可以使用http作為通訊協議.這類遊戲對實時性要求不是很高,使用http也很容易做到效能擴充套件,可...
遊戲開發 協議設計
遊戲開發 協議設計 遊戲開發 協議 protobuf 遊戲開發 協議 protobuf原理詳解 通俗地說,協議就是通訊雙方能夠理解的一種資料格式。維基百科這麼定義網路協議 網路協議為計算機網路中進行資料交換而建立的規則 標準或約定的集合。協議設計包含三要素 語法 語法是使用者資料與控制資訊的結構與格...
Erlang開發建議
以下是在erlang專案開發中的一些記錄,即包含很多通俗易懂的原則,也包含一些似是而非的建議,比較混亂,還沒有積累到乙個可以分門別類的地步,各位就將就看吧.確保沒有任何編譯警告 erlang中string採用list實現,32位系統中,其1個字元用8個位元組的空間 4個儲存value,4個儲存指標 ...