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

同一端口上的多个DatagramSocket,仅首先获得流量

吕高寒
2023-03-14

我创建了一个java服务器,它在一个特定的端口上监听udp数据包,当接收到一个数据包时,它创建一个新的线程,一个新的datagramsocket绑定到该端口,因此,如果它在该端口上获得10个数据包,它将创建10个线程,新的socket绑定到同一个端口。

问题是,尽管创建了新的线程和套接字,但只有创建的第一个套接字接收所有流量,其他线程/套接字继续侦听,而没有获得任何流量。

单是这个线程无法跟上流量,一些数据包丢失了

我正在使用address localhost和jmeter udp插件测试这一点

共有1个答案

武睿
2023-03-14

数据报套接字类似于服务器套接字;每个主机只能有一个绑定实例。

UDP在设计上是有损的(由于西北方向和读取速度不够快的缓慢目的地),但是有了一个完美的应用程序,你可以期待MB/s在localhost上,甚至在局域网上,但在广域网或有限的应用程序上没有那么快。

大多数UDP应用程序都会有一个快速侦听器,以避免溢出造成的操作系统级损失(没有java对缓冲区空间的控制),并将数据报复制到应用程序中的队列(不要共享字节数组,要小心),这些队列可以随意调整深度,以及从这些队列中提取的工作线程池。

 类似资料:
  • 问题内容: 我需要使用同一端口收听2个不同的多播组。会从和那里听。两个多播组都使用相同的文件,但我无法控制它。 运行程序时,我在每个程序中都接收到两个多播流,即和上广播的数据包。我怀疑问题是由于通用端口引起的。这是我用来订阅多播的代码: 如何在每个程序中过滤特定的多播组? 问题答案: 如果你改变 至 您可能会获得更大的成功。 (如果您更改程序以使用,则可以使其适应未来。)

  • 例如,我可以启动两个程序侦听端口371。第二个没有任何问题地启动并接收传入连接,而第一个没有。一旦最后开始的进程终止,第一个接收它们。 假设这是Windows(XP)行为,它怎么可能是安全的行为呢?这意味着人们可以“过载”任何已经侦听的端口,而不是获得通常的“地址已经在使用”错误消息,并简单地绕过防火墙,规则只是说“允许端口371上的任何传入TCP连接”。

  • 是否有可能在spring boot中使用嵌入式tomcat配置多个webapps,其方式如下: null

  • Flink社区! 我有一个关于在Flink中连接相同键上的多个流的问题(等连接)。我还是一个新手,正在为我的团队评估Flink,将我们的Spark批处理应用程序迁移到流处理。 注意:我看了FabianHüske的这篇关于加入处理的文章:窥视Apache Flink的引擎室。 为了简化问题,假设您有3个流,每个流都有唯一的记录,可以通过id字段进行键控。对于流中的每条记录,您将在其他流中找到相应的记

  • 问题内容: 我有多个Node应用程序(在Express框架上构建)。 现在,我将它们这样放置- 现在,我想在同一端口(例如8080)上运行这3个应用程序。那可能吗 ? 需要注意的一件事是,每个应用都有类似的通用路线- 基本上,我想这样做,就像您可以使用Apache / PHP设置一样。 因此,当您拥有LAMP堆栈时- 您可以通过-作为其他应用轻松访问它们- 问题答案: 您可以使用:

  • 我想在我的web服务器上运行多个非集群垂直市场。每个verticle由一个单独的进程/命令行启动,并为同一个主机和具有唯一路由的同一个端口创建自己的HTTP服务器(vertx.createHttpServer)。然而,这似乎不起作用,因为在开始一个垂直之后,所有进一步的垂直抛出一个BindException“地址已经在使用中”。 作为Vert. x的新手,我只能想到两种方法来通过这个考试: < l