gpt4 book ai didi

java - 如何管理打开的数据报套接字以避免超过最大值?

转载 作者:太空宇宙 更新时间:2023-11-04 13:02:42 25 4
gpt4 key购买 nike

我正在开发一些使用大量数据报套接字的代码。如果不仔细编码,这个数字可能会超过 jvm 允许的最大值。使用 -Dsun.net.maxDatagramSockets=x 并不总是一种选择。我有这样的代码:

/* opening this channel will bring us to the limit--the maximum allowed by the JVM */
DatagramChannel channel1 = DatagramChannel.open();

/* do some stuff with channel1 */

/* Close channel1, and dereference it */
channel1.close();
channel1 = null;

/* this throws SocketException */
DatagramChannel channel2 = DatagramChannel.open();

共享DatagramChannel(即使用receive())可能是另一种选择,但了解这里发生的情况会很有用。

编辑:在缩小实际代码中的问题范围之后,我发现代码片段过于简化。这里的想法是,在达到 DatagramChannel 的最大数量后,只有在关闭另一个 DatagramChannel 时才会创建新的。但是,我正在处理 SocketChannelDatagramChannel 的混合情况,问题是,即使我在处理完 channel 后调用 close(),我也必须确保刚刚关闭的 channel 是 DatagramChannel(而不是 SocketChannel),然后再创建另一个 channel 。只是一个疏忽。

最佳答案

处理此问题的最佳方法是使用一组可重用的池化套接字。我建议使用诸如 netty 之类的框架以避免必须自己实现所有具体细节。

关于java - 如何管理打开的数据报套接字以避免超过最大值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34795865/

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