当前位置: 首页 > 知识库问答 >
问题:

当服务器只有 1 个 UDP 套接字时,如何处理许多传入的 UDP 数据包?

宰坚
2023-03-14

当服务器只有1个UDP套接字,并且许多客户端向其发送UDP数据包时,处理所有传入数据包的最佳方法是什么?

我认为这也可能是TCP数据包的一个问题,因为线程数量有限,无法涵盖所有客户端TCP套接字接收事件。

但在这种情况下情况会更好,因为每个客户端有1个TCP套接字,即使网络缓冲区已满,数据包接收也会被阻止,直到队列有空间为止(如果我错了,请告诉我)。

然而,当缓冲区已满且只有1个套接字时,UDP数据包将被丢弃,因此发生这种情况的可能性更高。

我如何解决这个问题?我找了一段时间,但找不到明确的答案。我应该实施自己的排队系统吗?或者只是最大化网络缓冲区大小?

共有1个答案

甄煜
2023-03-14

无法保证您不会丢弃 UDP 消息。无论您做什么,如果发送的数据包速率太大,您都会丢弃一些数据包,无论是在接收主机上还是在网络中的某个地方。

一些可以提供帮助的事情包括:

> < li>

在Java应用程序中实现消息的内部队列,并将它们交给线程池进行处理。

增加内核的消息缓冲。

但是,这两种情况都不能处理平均消息到达率高于接收方处理它们的能力或网络容量的情况。这将不可避免地导致消息(请求)丢失。

我已经搜索了一会儿,但我不能得到一个明确的答案。

那是因为根本就没有!有些问题从根本上是无法解决的。对其他问题来说,最佳答案取决于难以衡量或预测的因素。

(如果你想要确定……不要使用网络!)

在TCP情况下,您应该为每个客户端使用一个(长期)套接字。根据需要支持的套接字数量,您可以:

  • 为每个套接字(和客户端)指定一个服务器端线程
  • 使用<code>java.nio.channel。选择器和线程池

如果请求的速率超过了服务器的处理能力,您仍然会遇到问题。然而,TCP连接将确保请求不会丢失,并确保客户端得到一些“背压”。

 类似资料:
  • 到目前为止,UDP服务器的所有示例代码都使用了C lang中的客户端IP/port from recvfrom()函数。我想在udp服务器应用程序中使用独占的udp客户端套接字。就像tcp服务器应用程序中accept()调用后的套接字fd一样。有没有一种方法可以用套接字绑定UDP客户端?

  • 为了实现这一点,我使用了队列/线程池机制。最初,我创建一个固定数量线程的池,并有一个队列datastructure来存储客户机地址。这个队列在所有线程之间共享,因此我使用“互斥”来锁定/解锁这个队列。在主服务器线程中,我创建一个套接字,将其绑定到全局端口/地址,然后在“recvfrom”调用上阻止服务器。任何希望与服务器通信的客户端都会向侦听全局端口地址的主线程服务器发送“HI”消息。主服务器线程

  • 我已经在Minikube上部署了一个UDP套接字服务器。套接字服务绑定到端口2152。下面是description pod命令中的IP片段。 我的客户机与minikube运行在同一个VM上,无法与服务器通信。我在客户端使用服务器地址IP 172.17.0.3,端口为2152。我还尝试使用minikube IP 192.168.49.2将UDP数据从客户端发送到服务器。 请帮忙,这里有什么问题。

  • 我正在Linux上编写一个C应用程序。我的应用程序有一个 UDP 服务器,它在某些事件上向客户端发送数据。UDP 服务器还会收到来自客户端的一些反馈/确认。 为了实现这个应用程序,我使用了一个UDP套接字(例如< code>int fdSocket)来发送和接收来自所有客户端的数据。我将这个socked绑定到端口8080,并将套接字设置为非阻塞模式。 我创建了两个线程。在一个线程中,我等待某个事件

  • 我是 python 和套接字的新手,正在尝试编写一个回显客户端/服务器套接字。我已经编写了服务器,以便丢失 30% 的数据包。我将客户端编程为在一秒后超时,因为数据包可能会丢失。但是,每当我运行客户端套接字时,我的输出都是 100% 请求超时。我假设我得到这个输出,因为我的服务器从未收到过消息。我已经多次查看了我的代码,但无法弄清楚为什么我不断获得此输出。下面是我的服务器和客户端套接字的代码。任何

  • 程序代码 udp_server.php //创建Server对象,监听 127.0.0.1:9502端口,类型为SWOOLE_SOCK_UDP $serv = new Swoole\Server("127.0.0.1", 9502, SWOOLE_PROCESS, SWOOLE_SOCK_UDP); //监听数据接收事件 $serv->on('Packet', function ($serv,