【问题标题】:Java poll on network connectionsJava 轮询网络连接
【发布时间】:2013-03-19 06:54:59
【问题描述】:

我正在用 Java 编写一个程序,我在一个线程上打开了 256 个网络连接。每当套接字上有任何数据时,我都应该读取它并进行处理。目前,我正在使用以下方法:

while true
do
   iterate over all network connections
   do
         if non-blocking read on socket says there is data
         then
               read data
               process it
         endif
   done
   sleep for 10 milli-seconds
done

有没有更好的方法在 Java 上做同样的事情?我知道 C/C++ 中有一个 poll 方法。但是在谷歌搜索之后,我没有得到关于 Java 轮询的具体想法。有人可以解释一下吗??

【问题讨论】:

  • 只是一个想法……一个进程的 256 个网络连接是不是有点过多?
  • 您可以为每个网络连接创建一个阻塞读取线程。这样你就不会遍历连接(我认为它是由操作系统完成的)并且线程会在数据到达时唤醒(不再需要睡眠)。
  • @Quirliom 程序需要它。我无法减少连接数。
  • @Burkhard 这将使编程模型复杂化。当 Linux 内核已经提供阻塞 + 轮询原语时,我不想在这件事上投入太多时间。
  • 线程是如何唤醒的?连接会自动唤醒它吗?还是我们需要别的东西?

标签: java polling serversocket


【解决方案1】:

java.nio 包听起来很适合您想要做的事情。它提供了执行异步 IO 的方法。

【讨论】:

  • 它还提供了执行non-blockingmultiplexed I/O的方法,听起来更像他想做的事情。
【解决方案2】:

看看http://netty.io/(这是一个在java上构建网络应用程序的非阻塞框架)。 https://community.jboss.org/wiki/NettyExampleOfPingPongUsingObject - netty 上的“hello world”。

【讨论】:

    猜你喜欢
    • 2012-12-21
    • 2011-06-24
    • 1970-01-01
    • 2011-10-12
    • 2020-06-19
    • 1970-01-01
    • 2011-06-28
    • 1970-01-01
    • 2010-10-10
    相关资源
    最近更新 更多