【发布时间】:2014-04-12 03:19:28
【问题描述】:
我正在为回合制游戏编写游戏服务器。一个标准是游戏需要对所有玩家尽可能公平。
到目前为止,它是这样工作的:
- 每个客户端都有一个 TCP 连接。 (如果相关,则通过 WebSockets 打开连接)
- 在运行时,通过 epoll 不断检查传入的套接字消息。
- 使用准备好读取的套接字遍历客户端:
- 从客户端读取所有消息。
- 更新每条消息的内部游戏状态。
- 将传出消息排队到受影响的客户端。
- 在每个“窗口”(转弯)的末尾:
- 遍历客户端并将所有排队的传出消息写入其套接字
我对公平的关注提出了以下问题:
向客户发送消息的顺序是否重要?
- 对我的程序调用所有套接字上的 write() 只需要几分之一秒,但是如果我对客户端列表进行排序,在底层操作系统或网络中的某个地方会有所不同吗?
- 也许我应该先发送到延迟最高的客户端?
我如何将传出消息写入套接字是否重要?
- 目前我将它们写成一大块。大小可以超过单个数据包。
- 如果我以小于 1 个数据包的小块发送消息,客户端开始处理会更快吗?
- 一次向每个客户端写入 1 个数据包并多次迭代客户端会更好吗?
是否有任何 linux/网络配置会在这里产生影响?
提前感谢您的反馈和提示。
【问题讨论】:
标签: sockets networking tcp