遊戲服務端框架之客戶端協議組合下發

2021-08-07 22:05:01 字數 778 閱讀 5169

很多時候,客戶端乙個請求過來,服務端可能需要發多個響應訊息。典型地,當客戶端請求載入登入載入資源完成,服務端需要推送非常多的訊息。功能模組越多,訊息也越多。這個時候,可能就需要對下發的客戶端協議進行優化。

個人理解,針對這種情況,比較好的優化方式是整合多個小訊息一起下發。也就是說,對於多個訊息,我們不直接乙個乙個下發,而是把多個訊息看作乙個特殊的訊息組合下發

1. 省流量。由於每個訊息都會一些包頭,幾個訊息一起下發也只需要乙個包頭。

2. 防止客戶端解包降幀。客戶端每幀拆包的數量是有限的,瞬間拆多個包看起來就會卡。

3. 緩解服務端io執行緒壓力。服務端推送訊息一般是非同步執行緒處理的,包數量越少,io執行緒就不會太繁忙。

當然,組合包的應用場合,應該是整合多個小的訊息。如果單獨的訊息體資訊量大,那麼就沒必要整合了。

對於我們的服務端框架,加上乙個組合包,**也很少。

首先,由於每個訊息都帶有模組號,型別id,還有訊息體,我們有必要抽象出這個整體概念,也是為了傳輸資料方便。

public class packet {

@protobuf(order = 10)

private int module;

@protobuf(order = 11)

private int cmd;

@protobuf(order = 12,fieldtype = fieldtype.bytes)

/** 序列化的訊息體 */

private byte bod

Python UDP客戶端 服務端

udpclient.py coding utf 8 from socket import servername 127.0.0.1 伺服器位址,本例中使用一台遠端主機 serverport 12000 伺服器指定的埠 clientsocket socket af inet,sock dgram 建立...

python udp客戶端,服務端

客戶端1 建立套接字 2 收發資料 3 關閉套接字 import socket 建立套接字 socket socket.socket socket.af inet,socket.sock dgram 傳送資料 傳送資料的型別必須是位元組型別 data 你猜 encode gbk addr 192.1...

udp服務端 客戶端

個數 2的16次方 埠是資料發出或接收的入口 埠的目的 通過埠號找到對應的程序,完成資料的通訊 著名埠0 1023 這是建立了乙個基於udp協議的服務端 import socket todo 1.0 建立了乙個套接字,用來連線客戶端,傳送與接收資料 udp server socket.socket ...