SuperSocket 學習筆記主要是學習SuperSocket 文檔和其框架,給出文檔鏈接地址:http://docs.supersocket.net/v1-6/zh-CN)
一、協議
構建一個網絡應用程序, 僅僅使用 TCP 還是 UDP 是遠遠不夠的。 因為TCP 和 UDP 是傳輸層協議。定義了傳輸層協議是不能讓網絡的兩端進行通信的。需要定義應用層通信協議把接收到的二進制數據轉化成你程序能理解的請求。
二、SuperSocket 中內置的命令行協議
在SuperSocket 中, 如果沒有定義的協議,SuperSocket 將會使用命令行協議, 每個請求必須以回車換行結尾 "\r\n"。所有接收到的數據將會翻譯成 StringRequestInfo 實例,其定義
public class StringRequestInfo { public string Key { get; } public string Body { get; } public string[] Parameters { get; } /* Other properties and methods */ }
SuperSocket 中內置的命令行協議用空格來分割請求的Key和參,因此當客戶端發送如下數據到服務器端時:"LOGIN kerry 123456" + NewLine
服務器將會收到一個 StringRequestInfo 實例,這個實例的屬性為:
Key: "LOGIN" Body: "kerry 123456"; Parameters: ["kerry", "123456"]
同時定義 "LOGIN" 的命令, 這個命令的 ExecuteCommand 方法將會被執行,服務器所接收到的StringRequestInfo實例也將作為參數傳給這個方法
public class LOGIN : CommandBase<AppSession, StringRequestInfo> { public override void ExecuteCommand(AppSession session, StringRequestInfo requestInfo) { } }
三、自定義命令行協議
規則:(1)請求 key 和 body 必須通過字符 ':' 分隔, 而且多個參數被字符 ',' 分隔。
(2)代碼擴展命令行協議寫成:
(3)深度的定義請求的格式
基於接口 IRequestInfoParser 來實現一個 RequestInfoParser 類, 然后當實例化 CommandLineReceiveFilterFactory 時傳入擬定一個 RequestInfoParser 實例