假设有一台服务器处理多个客户端。 并且有由6个客户端组成的世界。
我认为设计此服务器有 3 种方法
-
一个套接字用于整个接收任务,另一个套接字用于整个发送任务。
一个套接字 用于整个接收任务,为与 6 个客户端关联的每个世界分配发送套接字。
每个世界的接收套接字,每个世界的发送套接字
哪个是最好的? (当然可以有其他方法)
对不起,我的英语:)不好
您可以在同一套接字上接收/发送。
了解 UDP 多客户端服务器基础知识
我不知道应用程序或您要做什么,但是:
3)这将要求客户端发送到不同的端口,因为每个端口只能侦听1个套接字
2)为什么要分配一个新的套接字,只需使用带有udp的相同套接字即可使用sendto
1) 同上
我知道这并不能准确回答您的问题,但是因为它与性能有关,我想我会给出我的意见。
如果你想要性能,你必须考虑到 1 线程只能沿着管道这么快地移动信息,而你的服务器很可能是多核的,那么为什么不使用你拥有的一切呢?
UDP 发送应该在一个线程上。它的工作是循环一个队列样式的容器(先进先出)。它应该接受一个构建的数据包并发送它,仅此而已。为了防止它浪费周期无缘无故地旋转,你可以使用 Sleep(1),这也是浪费的(实际上不仅仅是休眠 1ms),或者实现线程信令(通常性能更好)。
在另一个线程(可能是主线程)中,数据包通过 OpCode 组装线与数据(加密或未加密)一起构造并放置在队列中,UDP 发送线程将在计划后拾取它。
UDP 接收也是如此,单独的线程,基于套接字状态或睡眠(1)的信令。将数据包传递到操作码剥离线。
您只需要 1 个套接字即可与客户端进行整个 UDP 通信。
我将套接字写为非阻塞。阻止套接字可以用于登录服务器(如果单独)或修补服务器,因为它们在生活中的唯一目的是接受套接字连接。
希望这有帮助。