我应该使用线程来检查多人游戏的套接字吗?

多人游戏中,获取/发送信息从/到套接字的代码驻留在游戏循环中还是属于它自己的线程?

大多数编程语言或networking库都具有用于asynchronousIO操作的API,其中读取和发送操作立即返回。 读取操作只返回自上次调用后缓冲的数据,后台执行发送操作。 当你有这样一个可用的API时,通常没有理由在其上添加另一个线程层(这些API通常在你的背后使用线程)。

但是,如果没有可用的非阻塞API或由于某种原因可用的API不足,则应该编写自己的asynchronousnetworking代码,为每个networking连接使用单独的线程。

它通常在另一个线程中,在networking线程和主线程的游戏逻辑之间有某种forms的无锁队列传递消息。 这在一些操作系统中几乎是必需的,这些操作系统具有低效的networking堆栈或其他限制,使得需要单独的线程来高效地处理多个套接字,尤其是老版本的Windows(在该域中仍然不是很好)。 Linux和一些BSD可以在没有线程的情况下变得非常高效,但是在networking中使用线程仍然是有利的(特别是当你的networking速率不符合你的帧速率时,通常不会)。