C ++客户端 - 服务器多人游戏的良好实践

时间:2014-05-25 12:58:40

标签: c++ multithreading client-server winsock2

请注意我对线程和WinSock都不熟悉。

对于大学项目,我必须创建一个简单的多人游戏,用C / C ++编写,使用WinSock进行通信,使用WinAPI线程处理多个客户端(最多4个)。

游戏非常简单,玩家沿着棋盘移动他们的点并留下他们的痕迹。在特定时间内成功覆盖最大区域的玩家赢得了比赛。

在客户端应用程序中,我运行了2个线程。第一个将有关按下的键的信息发送到服务器。第二个接收来自服务器的数据(所有玩家的坐标)并吸引世界。

在服务器端我为每个客户端运行1个线程来接收他的输入,然后在服务器上更新他的坐标。还有另一个线程可以执行逻辑(检查冲突,检查玩家是否没有离开屏幕等)并不断向所有客户发送玩家坐标。

我在两侧使用阻塞插座。

我测试了2个玩家的游戏,服务器和客户都在同一个网络中的不同机器上,结果发现玩家经历了明显的滞后并且没有顺利移动。

我的做法完全错了吗?什么是为多人游戏创建服务器和客户端应用程序的最佳方式?

1 个答案:

答案 0 :(得分:0)

套接字通常尝试将多个小消息组合成一个传输,以提高网络效率。但这会减慢大多数消息的传输速度,因为它们会在缓冲区中停留一段时间,希望在传输之前获得更多数据。这是“Nagle算法”。您可以尝试使用带有TCP_NODELAY的SetSocketOpt将其关闭。这应该减少延迟。

对于本地网络上的少数玩家,您可以考虑使用点对点通信方案而不是使用服务器。通过服务器路由所有内容至少会使通信延迟加倍。

相关问题