如何在多个线程上平衡接收到的 udp 数据包?

How do I load balance received udp packets over multiple threads?

我正在创建一个应用程序,它将通过 udp 数据包发送和接收大量数据。我希望能够通过添加或减少更多工作线程来扩展对这些请求的处理。但是,当我添加第二个线程并开始等待数据时,出现以下错误。

“通常只允许每个套接字地址 (protocol/network address/port) 使用一次”

代码:

static void Main(string[] args)
{
    Console.WriteLine("Running...");

    Thread threadA = new Thread(new ThreadStart(ProcessMessage));
    Thread threadB = new Thread(new ThreadStart(ProcessMessage));

    threadA.Start();
    threadB.Start();

    Console.WriteLine("Press any key.");
    Console.ReadLine();
}

private static void ProcessMessage()
{
    using (var udpClient = new UdpClient(11000))
    {
        var sender = new System.Net.IPEndPoint(IPAddress.Any, 11000);
        var data = udpClient.Receive(ref sender);

        // Do work
    }
}

错误很明显,但我的问题是:如何在多个线程之间正确分配工作?

感谢您的帮助,对于任何拼写错误,我们深表歉意。 我的母语不是英语。

C.Gonzalez的评论很有帮助,所以我将其作为正确答案放在这里。

处理大量 UDP 的常用方法是让一个线程尽可能快地使用数据(并将消息的内容放入队列中)。 (任何较新的硬件接收数据的速度与网络发送数据的速度一样快)一个或多个其他线程清空并处理数据。如果需要响应,可以将其放入传出队列中,供另一个专用线程将消息发送出去(您可以使用与该专用线程相同的套接字)。同样,任何相对较新的硬件都可以轻松地以线速发送和接收双工模式。