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

Linux 设计UDP服务器的最佳方法是什么?,linux,sockets,server,udp,Linux,Sockets,Server,Udp,假设有一台服务器处理多个客户机。 世界上有6个客户 我认为设计这个服务器有三种方法 一个套接字用于整个接收任务,另一个套接字用于整个发送任务 一个套接字用于整个接收任务,为与6个客户端关联的每个世界分配发送套接字 为每个世界接收套接字,为每个世界发送套接字 哪一个是最好的? (当然,可以有其他方法) 对不起,我的英语不好:)您可以在同一个套接字上接收/发送 看看 我不知道应用程序或您正在尝试做什么,但是: 3) 它需要客户端发送到不同的端口,因为每个端口只能侦听1个套接字 2) 为什么要分配一个

假设有一台服务器处理多个客户机。 世界上有6个客户

我认为设计这个服务器有三种方法

  • 一个套接字用于整个接收任务,另一个套接字用于整个发送任务

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

  • 为每个世界接收套接字,为每个世界发送套接字

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


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

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

    看看

    我不知道应用程序或您正在尝试做什么,但是:

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

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


    1) 同上

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

    看看

    我不知道应用程序或您正在尝试做什么,但是:

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

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


    1) 同上

    我知道这并不能准确回答你的问题,但因为这是关于性能的,我想我会给出我的意见

    如果你想要性能,你必须考虑1线程只能快速地沿着管道移动信息,而服务器很可能是多核的,那么为什么不使用你拥有的所有东西? UDP发送应该在一个线程上。它的工作是循环队列样式的容器(先进先出)。它应该接受一个构造好的数据包并发送出去,就这样。为了防止它白白浪费周期,您可以使用Sleep(1),这也是一种浪费(实际上并不只是睡眠1ms),或者实现线程信号(通常对性能更好)

    在另一个线程(可能是主线程)中,数据包通过操作码装配线构造,包含数据(加密或不加密),并放置在队列中,UDP发送线程将在调度后在队列中拾取数据包

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

    与客户端的整个UDP通信只需要一个套接字

    我将套接字写为非阻塞。阻塞套接字可以用于登录服务器(如果单独的话)或补丁服务器,因为它们的唯一用途是接受套接字连接


    希望这能有所帮助。

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

    如果你想要性能,你必须考虑1线程只能快速地沿着管道移动信息,而服务器很可能是多核的,那么为什么不使用你拥有的所有东西? UDP发送应该在一个线程上。它的工作是循环队列样式的容器(先进先出)。它应该接受一个构造好的数据包并发送出去,就这样。为了防止它白白浪费周期,您可以使用Sleep(1),这也是一种浪费(实际上并不只是睡眠1ms),或者实现线程信号(通常对性能更好)

    在另一个线程(可能是主线程)中,数据包通过操作码装配线构造,包含数据(加密或不加密),并放置在队列中,UDP发送线程将在调度后在队列中拾取数据包

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

    与客户端的整个UDP通信只需要一个套接字

    我将套接字写为非阻塞。阻塞套接字可以用于登录服务器(如果单独的话)或补丁服务器,因为它们的唯一用途是接受套接字连接


    希望这有帮助。

    谢谢你的回答。但是,我想谈的是每种方法的性能。:)谢谢你的回答。但是,我想谈的是每种方法的性能。:)