网游拓扑之网关

很多知识也是最近才领会到,如果不对,请行家指正。

在posix下在网游的前端开多个网关是常用的事情,而在windows下往往一个就好,甚至不用,为什么呢?

posix的网关基于libevent的模型,虽然io是block的,但是他是单线程的,所以发挥不了多cpu的作用,所以fork出多个是个办法。网关还有另一个作用,对包进行编码和解码,甚至压缩加解密,这些都比较耗cpu。

而在windows下使用iocp,windows会自动的启动多个线程(cpu * 2)来做recieve,就相当于多个网关;而对于发送,常见的做法也是开一个send线程(不要笑话我在windows下做服务器,以前确实没有启蒙,土法造钢也是难免)。这样的做法比多网关的做法当然简单——维护多网关至少需要维护多个连接socket;效率高——用生产者和消费者的队列当然比socket高,send线程只有一个是缺陷,如果有瓶颈以后可以改进为多个send。

当然多进程也有好处,部署更为灵活,但是感觉这里用不上;错误也可以封闭,但是在对于send和recieve,基本错误不会发生在这里。

我有点偏向windows,因为用了多年,感觉有个MS不断更新着开发工具,debug,profile都感觉越来越轻松。但是最近用linux也感觉不错,命令行更有控制感,特别是在多用户方面,是强过windows许多,十几个人的服务程序都开在一台服务器上,所有程序的开发也在同一台机器,你感觉不到别人的存在。

posted on 2011-10-17 22:51  风行水上  阅读(273)  评论(0编辑  收藏  举报