关于IOCP的更进一步理解
接触IOCP的概念是在今年4月份刚开始作网游的时候,如果不是作网络编程特别是服务器编程的朋友,可能连IOCP的概念都不知道,这一点都不奇怪。正如一位网友所说的,IOCP说白了就是一个系统级队列及对这个队列进行维护的一个机制,我们只要按照基本固定的方式来调用相关的函数,就可以实现一个基于IOCP架构的服务器模型。建立IOCP的基本步骤很多资料上都有介绍,随便找找就能找到一大堆,我使用的语言是DELPHI,最终实现的服务器,测试的时候一个客户端开了3000个左右的端口来连接服务器,结果客户端先报系统资源错误了,而服务器还是好的。我想这样的测试已经基本可以满足我的游戏服务器需要了。
基于我现在的理解,可能影响IOCP效率的主要有两点:一个是空闲的无用连接;另一个是每次发送、接收时使用的HANDLEDATA。针对于这两点,现在已经有不少人提出了比较好的实现方案。对于空闲连接,可以有专门的线程进行监视,一个连接上来多长时间一直没有发送数据上来就断开这个连接;对于每次在发送和接收时都必须创建新的HANDLEDATA则可以事先创建一个HANDLEDATA数据块的队列结构,用的时候从头部取,不用的时候从尾部存。
如今,项目已经开展了将近七个月,总体的项目进度不能让人满意,不过,值得总结的经验还是很多的,现在公司的第二个游戏开发接近尾声,相应的服务器构架和客户端架构随着两款游戏的基本完成也算大致定了下来。不过,前方的路还很长,产品本身离我所设想的构架还相差不少距离,后面的路还很长,总之希望达到的目标是:让玩家在游戏中能找到快乐,忘掉生活的烦恼。呵呵。