内置消息分发接口?
bg5sbk opened this issue · comments
达达 commented
目前的接口抽象度太高,从零开始搭建一个服务端的过程不够流畅,前期准备工作太多。
对于网关和游戏这种分包 + 多消息类型的项目,都会需要重头构建一套消息识别和派发的CodecType。
是不是应该内置进消息识别和分发的接口,就可以配合fastbin或者别的协议工具快速搭建项目。
想象中应该像这样:
server, _ := link.Serve("tcp", "0.0.0.0:10010",
link.Packet(2, 65535, 4096, link.Uint16Handlers{
1: PingMsgHandler,
2: PongMsgHandler,
}),
)
session, _ := server.Accept()
var msg link.Request
session.Receive(&msg)
msg.Process()
达达 commented
server, _ := link.Serve("tcp", "0.0.0.0:10010",
link.Packet(2, 65535, 4096, link.Uint16Dispatch(link.Handlers{
1: PingMsgHandler,
2: PongMsgHandler,
})),
)
如果是这样的接口,可以让link.Handlers统一用map,Dispatch那层可以自行做优化,比如Uint16Dispatch的消息容量只有256,所以可以直接用数组,比起map要高效很多。
lkm1107 commented
建议可以类似于skynet, 不同的场景实现一个该场景比较通用的处理,就像网关, 大家的网关需求就比较一致。
达达 commented
嗯,我其实都想去掉link.Packet
的可选参数,只保留2字节包头分包协议,留着实际上没啥意义又有危险性,消息分类其实我只想用uint16,需要别的分类方式可以自己另外搞。
如果把这些可选项都去掉,就会变得简单很多:
server, _ := link.Serve("tcp", "0.0.0.0:10010", link.PacketHandlers{
1: PingMsgHandler,
2: PongMsgHandler,
})
yangsong commented
第二种比较好,可以自定义Dispatch,可以通过做同步、异步接收,不同协议类型的解析等
lkm1107 commented
可否考虑把可选参数放独立的配置文件,这样直接省掉也不方便定制啊
达达 commented
没有运行时变更的需要