為了理解第二人生的客戶端與伺服器的溝通,那麼下面就來分析一下第二人生採用的網路協議。在目前的網路裡,主要有兩個協議:tcp和udp,而第二人生裡是採用udp協議。tcp協議與udp協議的主要區別,就是tcp有流量控制,可靠性控制,ip層組包功能,連線需要三次握手,而udp沒有這些保證,因此udp傳送的資料報需要自己來管理資料的有序性和可靠性。先來分析最底層的協議,它呼叫udp傳送資料的原始碼如下:
#001// returns true on success.
#002bool send_packet(int hsocket, const char *sendbuffer, int size, u32 recipient, int nport)
#003
#030
llinfos << "sendto() failed to " << u32_to_ip_string(recipient) << ":" << nport
#031
<< ", error " << last_error << llendl;
#032
} #033
} #034
} while ((nret == socket_error)
#035
&&(last_error == wsaewouldblock));
#036
#037
return (nret != socket_error);
#038}
在13行裡呼叫windows api函式sendto來傳送資料sendbuffer到目標位址stdstaddr裡,這樣就可以把資料交給windows的網路去傳送資料了。由於這裡採用非同步的udp來傳送資料,因此採用了乙個do while來處理正在阻塞的情況。當傳送不成功,並且錯誤碼是wsaewouldblock,說明windows api正在傳送過程中,不能接收資料,這樣就迴圈地檢查,直到傳送成功,或者出錯為止。第二人生裡跟伺服器傳送的訊息,就是這樣傳送出去的,看起來比較簡單吧。
蔡軍生深圳
第二人生的原始碼分析 二十六 底層網路協議
為了理解第二人生的客戶端與伺服器的溝通,那麼下面就來分析一下第二人生採用的網路協議。在目前的網路裡,主要有兩個協議 tcp和udp,而第二人生裡是採用udp協議。tcp協議與udp協議的主要區別,就是tcp有流量控制,可靠性控制,ip層組包功能,連線需要三次握手,而udp沒有這些保證,因此udp傳送...
第二人生的原始碼分析 2 第二人生的基本功能
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!第二人生的基功能可以定義為網路遊戲 社交網路和 web2.0 作為網路遊戲,它可以讓人扮演角色,也就是第二人生裡的居民。居民只要買到地,或者租到地後就可以建造各種各樣的自己想得到的東西。比如建造遊樂園,或者建造電影院,又或者建造過山車。同時,還可以...
第二人生的原始碼分析 二十 顯示人物名稱
在第二人生裡,每個人物顯示都有乙個名稱,那麼這個名稱又是怎麼樣顯示出來的呢?怎麼樣實現的呢?帶著這兩個問題,下面就去分析第二人生裡面的實現 它的人物名稱顯示如下 從上面的上,可以看到人物的頭上有乙個名稱顯示,用來標識人物角色。要顯示這個人物名稱,肯定是在二維的空間裡顯示的。每個人都有乙個名稱顯示,很...