|
发表于 2007-9-24 18:02:00
|
显示全部楼层
Re: Re: Re:游戏服务器技术交流
qinglan: Re: Re:游戏服务器技术交流
全局队列确实会有由于一个客户端的阻塞导致整个队列堵塞的情况
不知是否有好的解决方法,要没有的话那还是传统的方法,每个连接一个缓冲队列了
全局发送队列一开始也想使用,优点就是数据共享,后来实际运行中发现问题很多.
如果数据不保发送到client,可以忽略发送错误.即send后无论正确与否都直接
删除该消息.这对于UDP程序可以接受,但如果使用TCP,发送失败意味着该连接已断或者其他情况,如果等待发送(可能100-10000毫秒后才发送成功或者失败),
势必对后续队列中的消息产生延迟(100个连接每人send延迟100毫秒就很可怕了),
所以send必须是异步发送.每次pop连接buffer中的数据,异步发送数据,成功后继续pop发送余下的数据,平时待发数据都push到连接buffer中,一但连接buffer数据超过一定大小,即可认定该连接已断线或者恶意不接受数据,直接kick(当然你也可以在send超时直接kick,但client可能只是偶尔延迟几秒,这样做势必导致玩家常常掉线.).
个人认为有时候内存优化并没有解决服务器的压力,反而更增加了很多隐性bug.
因为网络是不确定,不可预测,除了AI计算,服务器瓶颈就在发送而不是内存上.
|
|