凯发真人娱乐

multiserver游戏服务器demo[c &lua] -凯发真人娱乐

2023-08-16,,

代码文件参考下述详解的类图,工程参考第零章工程说明

对socket库进行封装,抹平socket的window&linux的平台差异。
c 嵌入lua脚本,增加开发者编码效率,减少编译时间消耗。
非阻塞网络io
多线程任务模型
多服务模型

socket库封装

主要是对c 的socket库进行封装,使其更加易用,抹平window和linux平台差异

socketmgr:socket模块的门面(外观模式),提供tcpsocket、udpsocket的创建接口以及select多描述符非阻塞io的封装
tcpsocket:tcp长连接socket的connect、bind、listen等等接口的封装
udpsocket:udp短连接socket的封装,同上。
socketaddress:socket地址信息ip地址、端口等封装
socketaddressfactory:简单工厂,封装创建socketaddress细节

引擎

engine:整个程序的主循环,管理线程worker和service,负责worker、service、msg的处理调度。
service:包含处理基础消方法息由worker更新处理,其多态体现其的lua对象中
connwriter:网络消息写入器
writeobj:消息写入上下文
worker:工作线程的封装,处理service的消息
socketworker:网络消息线程,读写网络消息
conn:保存连接描述符等信息
msg:消息基类,驱动service的逻辑更新
socketrwmsg:socket可读可写(其中一个或者全部)时通知。
socketacceptmsg:socket建立连接时通知。
servicemsg:其他服务消息通知。
luaapi:向lua虚拟机注入c 方法

消息处理模型时序图

注意事件的分发推入和消息的处理不是连续的。消息进来后尝试唤醒线程,线程更新时处理消息。具体逻辑代码参考

消息进来:engine.send
消息处理:worker的()运算符重载方法

多服务

服务的多态使用lua编写,开发效率较高。每个服务可能开多个:例如login可以建立多个服务,处理逻辑时可以使用随机分配一个等策略以实现均衡负载。

gate(service):负责隔离客户端和服务,客户端和服务之间的消息由gate转发,同是统一编码解码
msgprocesser:编码器
config:服务配置文件,查询服务的id以通信。
loginservice...:具体的业务服务

其他

c 实现锁机制,linux平台自带锁的库文件,但windows貌似没有,为了抹平这部分平台差异,选择自己开发,包含:

spinlock 自旋锁
rwlock 读写锁

游戏服务器demo[c &lua]的相关教程结束。

网站地图