0

我有一个需要读取数百个套接字通信的应用程序。

我正在使用具有线程数上限的 ThreadPool 来服务这些套接字。如果套接字没有传入消息,这会导致所有线程阻塞。

我目前使用 100 毫秒的 soTimeout 来避免永久阻塞。我不喜欢这种方法,因为它可能会在它开始接收输入时超时。

还有其他方法可以解决这个问题吗?

我尝试使用 ObjectInputStream.isAvailable() 检查,但无论流中是否有数据,它总是返回 0。

我找不到任何其他方法来检查流中是否有数据。这将是理想的,因为那时我可以检查是否有数据,如果没有,则继续下一个流。

4

2 回答 2

1

你可以给蔚来一个机会。使用 Selector 和 SocketChannels 来等待数据,而不是为每个套接字创建线程。

选择器

套接字通道

于 2011-07-31T12:45:27.317 回答
1

这正是 NIO 框架旨在解决的问题。不幸的是,使用原始 NIO 比使用阻塞 IO 要困难一些。如果可以的话,我的建议是尝试像 Netty这样的框架,它可以为你减轻工作负担。

于 2011-07-31T12:47:39.717 回答