今天介紹一下如何在Unity3D下使用WebSocket。
首先介紹一下什么是websocket,以及與socket,和http的區別與聯系,然后介紹一下websocket的一些開源的項目。
WebSocket是什么
WebSocket協議是為了實現網絡客戶端和服務器端全雙工通信而引入的一種基於消息幀和TCP的通信機制,這個協議本身的目標是為了在http服務器上引入雙向通信的機制,從而克服http單向通信的缺陷(http設計的初衷就不是為了雙向通信),其可以在復用http的端口,支持http的代理,認證等,雖然如此,websocket可以獨立於http存在。 詳細的內容可以參考RFC6455(https://datatracker.ietf.org/doc/rfc6455/)里面有詳細的介紹。
那么WebSocket與http,socket有什么區別和聯系呢。
- WebSocket和http
其實從歷史上來講,websocket是為了克服http無法雙向通信而引入的,在通常的使用中,可以復用http的端口與功能,除此外,他們沒有其他的聯系,而是完全是獨立的協議,通常情況下,http是單向的web 服務,而websocket是全雙工的,服務器和客戶端可以實時的傳輸信息,在引用時他們可以在http服務器上同時部署,特別是在NodeJs中。 - WebSocket與Socket
那么websocket和socket是什么關系呢? 其實可以理解為websocket是在socket的基礎上實現的,其基於消息幀和TCP協議,而socket更通用,在編程中,可以選在tcp,udp,也需要自己控制數據流格式,每次的數據的長度都需要自己控制與讀取。
Unity3d下如何使用WebSocket
現在越來越多的Unity3d游戲需要使用websocket或者后台的服務,在實際中,NodeJs,SocketIO越來越多的作為后台的服務加以應用,那么在unity3d的前端上可以使用的開源的websocket有兩種:
-
UnitySocketIO
可以參考https://github.com/kaistseo/UnitySocketIO-WebSocketSharp ,其完全是C# dll的方式Unity3d中使用,測試了在windows和Linux下使用完全沒有問題。分析一下優缺點:
優點: 直接使用dll,無unity3d的依賴,代碼比較好測試,支持多種消息類型,如文本,Json等。
缺點:需要依賴第三方的庫,如SuperSocket,SimpleJson等,在iOS下需要單獨維護。 -
Socket.IO for unity
unity3d 的Asset store上有一個免費的開源項目 Socket.IO for unity (https://www.assetstore.unity3d.com/en/#!/content/21721)可以使用。測試了windows和linux版本,沒有問題。 其他的andriod和ios應該也沒有問題,根據代碼和文檔。
優點: 代碼直接嵌入到Unity3d中,有所有的源代碼,支持Json的消息傳輸。
缺點: 寫測試用例相對繁瑣,Json消息簡單,不支持對象的Json解析,不過這塊應該可以重寫。http://blog.csdn.net/leoleocs/article/details/48824921
