gpt4 book ai didi

java - 同一端口上有多个 DatagramSocket,只有第一个获得流量

转载 作者:行者123 更新时间:2023-12-02 02:04:22 25 4
gpt4 key购买 nike

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

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

单线程无法跟上流量,并且一些数据包丢失

我使用地址 localhost 和 jmeter udp 插件对此进行测试

最佳答案

数据报套接字就像服务器套接字;每个主机只有一个绑定(bind)实例。

UDP 在设计上是有损的(通过网络和慢速目的地读取速度不够快),但使用完美的应用程序,您可以在本地主机上期望 MB/s,甚至在 LAN 上,但在 WAN 或使用有限的应用程序。

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

关于java - 同一端口上有多个 DatagramSocket,只有第一个获得流量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57363453/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com