0

我正在为演示游戏编写一个简单的 mmo 服务器。我正在使用 UDP 协议(​​UdpClient),但我想知道其他服务器是如何工作的?:

  1. 只有 1 个 UDP 客户端处理所有连接的客户端和消息并响应它们
  2. 服务器为每个连接的播放器创建一个新的 UDP 客户端实例?

我已经测试了连接 50 个发送“Ping”消息的客户端,服务器必须回复“Pong”。第 50 个“Pong”发送大约需要 10 秒(在本地主机上)(同时,服务器应该也向第一个玩家发送 ping,因此队列可以延长到几个小时,这是荒谬的)

4

3 回答 3

1

其他服务器使用 1) 即使用一个 Socket 从任何客户端监听(我假设每个 UdpClient 都有一个)。此外:

  • 这个 Socket 应该在服务器的整个生命周期中使用,即当一个数据报完成时不要创建一个新的。
  • 接收和发送应该异步完成,因此接收/发送一个流不会阻止接收/发送另一个流。
  • 注意您发送/接收的数据量 - 如果您从服务器向多个客户端发送/接收数据,则数据总量乘以客户端数量。

在 localhost 上执行上述操作,50 个客户端发送 ping 并接收只有几个字节的 pong 应该花费不到 1 毫秒,假设其他一些进程没有最大化处理器。

于 2013-10-07T06:13:57.373 回答
0

我将通过说我不知道​​ MMO 服务器的内部结构来限定我的答案。我觉得 50 ping/pongs 需要 10 秒,我有点惊讶,尤其是在 localhost 上它会快得多。我怀疑您有某种问题,或者您的客户可能特别难以初始化。我建议您下载 Wireshark ( http://www.wireshark.org/ ) 之类的东西,然后查看您的 IP 流量以了解实际情况。

如果您玩 MMO,您还可以使用 wireshark 查看正在传输的数据包,并更好地了解他们的服务器在做什么。

于 2013-10-07T01:05:51.840 回答
0

你一定做错了什么。我编写了一个服务器,每秒处理 400 万条 ping/pong 消息,每条消息的传递时间为 10-20 毫秒。我正在使用 TCP 协议。

我建议你阅读 Beej 的套接字编程指南,重写你的客户端/服务器网络代码,看看你是否能得到更好的数字: http ://beej.us/guide/bgnet/

于 2013-12-28T23:58:39.140 回答