概述
BeetleX是一款高性能的服務通訊應用框架,通過它可以構建高吞吐的通訊應用服務。
- 基於異步的通訊模型,可應對百萬級別的服務通訊需求
- 支持TLS,可制定更可靠安全的通訊服務
- 支持Linux,Windows等多平台部署
- 支持完善的會話管理機制,針對就同應用擴展不同的會話管理機制
- Stream的數據操作模式,無縫兼容更多序列化組件並大大降低內存復制,讓性能更出色。
Github:https://github.com/IKende/BeetleX
記錄內容
主要記錄文檔中沒提到的細節信息,以免以后忘記,持續更新中……
1、服務端向客戶端發送內容格式
IServer有Send方法,message是object類型,看示例可以直接傳字串,進行發送。
bool Send(object message, ISession session); bool[] Send(object message, params ISession[] sessions); bool[] Send(object message, System.ArraySegment<ISession> sessions);
如果傳byte[]的話就需要傳入IWriteHandler類型的數據了,BytesHandler實現了IWriteHandler接口(具體實現代碼),
//data是byte[]數組 IWriteHandler write = new BytesHandler(data); Server.Send(write,Server.GetOnlines()); //向所有連接客戶端發消息
2、TCP連接超時自動關閉連接的屬性配置及使用
在創建TCP服務的時候配置SessionTimeOut 會話超時時間,單位是秒;當會話在指定時間內沒有接收數據的情況會主動關閉,默認值是0不啟用超時檢測。
server.Options.SessionTimeOut = 30;
但在在接收數據事件中更新接收時間,否則30秒后自動認為當前連接超時未收到數據。
//比如: protected override void OnReceiveMessage(IServer server, ISession session, object message) { server.UpdateSession(session); //防止超時 //.....業務代碼..... }
3、一些其它配置的強化說明
Combined 數據包Buffer整合序列化,些值只適用於廣播給多個會話的時候用,默認值是0不開啟
適用場景:避免向N個連接發消息,每個連接各自序列化消息的情況,但如果發送消息是byte[]的話,是否啟用意義不大。
備注:如果實際需求很多消息向一個(少量)連接發送時,加大sendbuffer,可以使用“BufferSize 會話題數據緩沖大,默認是8K”搞定。
IOQueueEnabled 是否啟用線程隊列來處理接收的消息,默認不啟用
適應場景:至少6核以上的CPU,沒幾核的就別開了,性能反而不好(經過Concurrent的集合越多,性能可能越差,這個和鎖設計有些關系)
備注: [Warring] no serverGC mode,please enable serverGC mode! <-這個也一樣,至少6核以上的CPU,沒幾核的就別開了
4、Websocket的使用
4.1、斷線事件
采用HttpDisconnect事件,Websocket相關對像都在e.Session.Tag中
4.2、Websocket原始的數據接收處理
采用WebSocketConnect和WebSocketReceive事件處理,即不使用,數據發送用SendToWebSocket(可指定特定要發的HttpRequest)
4.3、FasthttpApi熱更新
https://github.com/IKende/FastHttpApi/blob/master/src/ModuleManage.cs
