服务器开发的一点心得体会

这段时间在公司做一款游戏服务器开发,开发过程中的一点体会记录下来,日后也是一点经验

1.定时刷新机制,服务器中,要有不断定时刷新的措施,比如任务系统

2.线程的管理和调度,一般使用线程池方案

3.内存方面,为了提高性能,通常使用内存池,而不是频繁地动态分配内存

4.数据包的设计,通常为 头部+数据包体 的方式,接受数据包时,先接受包头,然后根据包头描述的大小接收剩下的数据;

   数据包的内存表现上,为了节省空间,通常将数据按二进制形式串行化(或者说序列化)到Buffer中再发送。

 Google的protobuf是个很好的工具,虽然在此次项目中没有用到,以后可能会考虑使用。

5.队列的运用,服务器中一般是多线程处理,队列的思想能够让逻辑变得清晰,服务器中经常用到,比如数据包队列。其实在Windows平台下,完成端口IOCP也是运用了队列 的思想

6.避免竞争,将一个Socket或者连接的处理都放在一个线程中,不要让多个线程同时处理同一个socket

7.日志系统,日志系统也可以运用线程和队列思想,可以考虑用跨平台的日志库,Log4cplus(Log4cxx),一款功能强大的开源C++日志库

8.异步回调思想的运用,服务器中有时要处理的结果并不是马上能够获取到,会发生阻塞,比如数据库的查询和更新(数据库的插入和更新都很耗时)等,此时可以运用异步回调的方式提高性能。

9.超时检测,有时候由于网络原因,客户端已经断线了,但服务器可能会很久都没收到信号,因此,定时的超时检测是很有必要的。

10.状态机的运用,比如用户状态机,状态机的运用能够使得逻辑更清晰

11.设计模式运用,用的比较多比如单例模式,观察者模式

 

posted @ 2015-06-17 20:52  Monkey.Knight  阅读(1983)  评论(4编辑  收藏  举报