代码改变世界

BeetleX使用经验记录

2020-03-14 15:34  景裔  阅读(1955)  评论(0编辑  收藏  举报

概述

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