BeetleX使用經驗記錄


概述

BeetleX是一款高性能的服務通訊應用框架,通過它可以構建高吞吐的通訊應用服務。

  • 基於異步的通訊模型,可應對百萬級別的服務通訊需求
  • 支持TLS,可制定更可靠安全的通訊服務
  • 支持Linux,Windows等多平台部署
  • 支持完善的會話管理機制,針對就同應用擴展不同的會話管理機制
  • Stream的數據操作模式,無縫兼容更多序列化組件並大大降低內存復制,讓性能更出色。

Github:https://github.com/IKende/BeetleX

文檔:http://doc.beetlex.io/

記錄內容

主要記錄文檔中沒提到的細節信息,以免以后忘記,持續更新中……

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熱更新

fasthttpapi有做熱更功能,只是並沒介紹這一功能,代碼可以查看
https://github.com/IKende/FastHttpApi/blob/master/src/ModuleManage.cs 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM