线程网络发送器/接收器对游戏服务器有意义吗?

时间:2015-12-28 11:17:36

标签: multithreading network-programming client-server

我在网上看到的常见方法是让接收者轮询套接字,当接收到数据包时,做一些游戏工作,然后在单个线程中发送响应,重复。试图这样做x次一次似乎是一个坏主意,因为游戏可以阻止网络,网络可以阻止游戏。

以下是我的想法:

GameApp - 在主线程上运行。在命令和输出命令中需要两个等待自由命令队列。

OutCommandProcessor - 在自己的线程上运行;从GameApp使用out命令队列并将命令转换为数据包并通过网络发送;当命令队列为空时,此线程会休眠,当命令放入队列时,GameApp会将其唤醒

InCommandProcessor - 在自己的线程上运行;将数据包转换为命令并推送到GameApp使用的命令队列;总是在轮询套接字时运行。

我在单线程上执行此操作的原因是:

  1. 网络不会阻止游戏,比如网络挂起,游戏继续运行。

  2. 如果GameApp忙,命令会继续排队而不是阻止网络接收更多数据包。 GameApp还可以减少延迟,因为它不会被发送数据包阻止。

  3. 我可以独立于网络堆栈测试游戏输入和输出,从而很好地分离了关注点。

  4. 你觉得这个好主意吗?单个基于线程事件/活动对象模式的工作会更好吗?还是更好的东西?谢谢!

0 个答案:

没有答案