设计 UDP 服务器的最佳方法是什么?



假设有一台服务器处理多个客户端。 并且有由6个客户端组成的世界。

我认为设计此服务器有 3 种方法

  1. 一个套接字用于整个接收任务,另一个套接字用于整个发送任务。

  2. 一个套接字
  3. 用于整个接收任务,为与 6 个客户端关联的每个世界分配发送套接字。

  4. 每个
  5. 世界的接收套接字,每个世界的发送套接字

哪个是最好的? (当然可以有其他方法)

对不起,我的英语:)不好

您可以在同一套接字上接收/发送。

了解 UDP 多客户端服务器基础知识

我不知道应用程序或您要做什么,但是:

3)这将要求客户端发送到不同的端口,因为每个端口只能侦听1个套接字

2)为什么要分配一个新的套接字,只需使用带有udp的相同套接字即可使用sendto

1) 同上

我知道这并不能准确回答您的问题,但是因为它与性能有关,我想我会给出我的意见。

如果你想要性能,你必须考虑到 1 线程只能沿着管道这么快地移动信息,而你的服务器很可能是多核的,那么为什么不使用你拥有的一切呢?

UDP 发送应该在一个线程上。它的工作是循环一个队列样式的容器(先进先出)。它应该接受一个构建的数据包并发送它,仅此而已。为了防止它浪费周期无缘无故地旋转,你可以使用 Sleep(1),这也是浪费的(实际上不仅仅是休眠 1ms),或者实现线程信令(通常性能更好)。

在另一个线程(可能是主线程)中,数据包通过 OpCode 组装线与数据(加密或未加密)一起构造并放置在队列中,UDP 发送线程将在计划后拾取它。

UDP 接收也是如此,单独的线程,基于套接字状态或睡眠(1)的信令。将数据包传递到操作码剥离线。

您只需要 1 个套接字即可与客户端进行整个 UDP 通信。

我将套接字写为非阻塞。阻止套接字可以用于登录服务器(如果单独)或修补服务器,因为它们在生活中的唯一目的是接受套接字连接。

希望这有帮助。

相关内容

最新更新