我正在尝试编写一个事件驱动的 HTTP Web 服务器。因为我将只使用一个线程,所以事件必须排队并异步处理(我也在使用 Java NIO)。但是,我只坚持第一步。我打开了一个ServerSocketChannel
. 我不确定SocketChannel
当请求进入时如何获得新连接。是否有可以通过 Java 访问的操作系统队列?(我不确定 Java 是否独立于操作系统)我不想使用任何阻塞调用。
如果我朝着错误的方向前进,我们将不胜感激。
谢谢。
我正在尝试编写一个事件驱动的 HTTP Web 服务器。因为我将只使用一个线程,所以事件必须排队并异步处理(我也在使用 Java NIO)。但是,我只坚持第一步。我打开了一个ServerSocketChannel
. 我不确定SocketChannel
当请求进入时如何获得新连接。是否有可以通过 Java 访问的操作系统队列?(我不确定 Java 是否独立于操作系统)我不想使用任何阻塞调用。
如果我朝着错误的方向前进,我们将不胜感激。
谢谢。
你需要:
OP_ACCEPT
在 select() 循环中,您将找到isAcceptable()
返回 true 的键:这意味着您需要调用 ServerSocketChannel.accept() 来接受连接。这将返回 a SocketChannel
,然后您必须将其置于非阻塞模式并使用OP_READ
.
反过来,这将导致isReadable()
返回 true 的键:这意味着您应该阅读相关的SocketChannel.
您将在 NIO 教程中找到所有这些示例。它比这复杂得多;-)