服务器开发的一点心得体会
这段时间在公司做一款游戏服务器开发,开发过程中的一点体会记录下来,日后也是一点经验
1.定时刷新机制,服务器中,要有不断定时刷新的措施,比如任务系统
2.线程的管理和调度,一般使用线程池方案
3.内存方面,为了提高性能,通常使用内存池,而不是频繁地动态分配内存
4.数据包的设计,通常为 头部+数据包体 的方式,接受数据包时,先接受包头,然后根据包头描述的大小接收剩下的数据;
数据包的内存表现上,为了节省空间,通常将数据按二进制形式串行化(或者说序列化)到Buffer中再发送。
Google的protobuf是个很好的工具,虽然在此次项目中没有用到,以后可能会考虑使用。
5.队列的运用,服务器中一般是多线程处理,队列的思想能够让逻辑变得清晰,服务器中经常用到,比如数据包队列。其实在Windows平台下,完成端口IOCP也是运用了队列 的思想
6.避免竞争,将一个Socket或者连接的处理都放在一个线程中,不要让多个线程同时处理同一个socket
7.日志系统,日志系统也可以运用线程和队列思想,可以考虑用跨平台的日志库,Log4cplus(Log4cxx),一款功能强大的开源C++日志库
8.异步回调思想的运用,服务器中有时要处理的结果并不是马上能够获取到,会发生阻塞,比如数据库的查询和更新(数据库的插入和更新都很耗时)等,此时可以运用异步回调的方式提高性能。
9.超时检测,有时候由于网络原因,客户端已经断线了,但服务器可能会很久都没收到信号,因此,定时的超时检测是很有必要的。
10.状态机的运用,比如用户状态机,状态机的运用能够使得逻辑更清晰
11.设计模式运用,用的比较多比如单例模式,观察者模式
勤奋+方法+毅力,如果做到了,成功只是时间问题。
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步