BeetleX使用经验记录
2020-03-14 15:34 景裔 阅读(1955) 评论(0) 编辑 收藏 举报概述
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