-1

我正在尝试编写一个事件驱动的 HTTP Web 服务器。因为我将只使用一个线程,所以事件必须排队并异步处理(我也在使用 Java NIO)。但是,我只坚持第一步。我打开了一个ServerSocketChannel. 我不确定SocketChannel当请求进入时如何获得新连接。是否有可以通过 Java 访问的操作系统队列?(我不确定 Java 是否独立于操作系统)我不想使用任何阻塞调用。

如果我朝着错误的方向前进,我们将不胜感激。

谢谢。

4

1 回答 1

0

你需要:

  • 创建一个选择器
  • 将 ServerSocketChannel 置于非阻塞模式
  • 使用选择器注册 SSCOP_ACCEPT
  • 编写一个 select() 循环,你可以在 NIO 教程中找到它

在 select() 循环中,您将找到isAcceptable()返回 true 的键:这意味着您需要调用 ServerSocketChannel.accept() 来接受连接。这将返回 a SocketChannel,然后您必须将其置于非阻塞模式并使用OP_READ.

反过来,这将导致isReadable()返回 true 的键:这意味着您应该阅读相关的SocketChannel.

您将在 NIO 教程中找到所有这些示例。它比这复杂得多;-)

于 2013-02-04T23:58:56.160 回答