Java中具有长时间休眠的HTTP服务器
我想编写一个具有长时间响应的HTTP服务器。 我准备了一个循环:Java中具有长时间休眠的HTTP服务器,java,server,Java,Server,我想编写一个具有长时间响应的HTTP服务器。 我准备了一个循环: serverSocketChannel = ServerSocketChannel.open(); serverSocketChannel.socket().bind(new InetSocketAddress(InetAddress.getByName("127.0.0.1"), 8000)); while (serverSocketChannel.isOpen()) { try {
serverSocketChannel = ServerSocketChannel.open();
serverSocketChannel.socket().bind(new InetSocketAddress(InetAddress.getByName("127.0.0.1"), 8000));
while (serverSocketChannel.isOpen()) {
try {
System.out.println("Waiting...");
SocketChannel socketChannel = serverSocketChannel.accept();
System.out.println("The new connection is open ;)");
} catch (IOException ex) {
System.out.println(ex.getMessage());
Logger.getLogger(ServerHttp.class.getName()).log(Level.SEVERE, null, ex);
}
}
我想从用户的浏览器中捕获新连接,将其放入列表中,然后另一个线程将获取该连接并对其进行解析。
但一开始我有个问题:上面的代码在serverSocketChannel.accept方法中冻结
当我添加socketChannel.close时,一切正常,但我不想在此处关闭连接,因为我需要很长时间的响应。查看javadoc以了解:
如果此通道处于非阻塞模式,则如果没有挂起的连接,此方法将立即返回null。否则它将无限期阻塞,直到新连接可用或发生I/O错误
这似乎描述了你正在经历的冰冻
您可以在非阻塞模式下打开ServerSocketChannel:
serverSocketChannel.configureBlocking(false);
结果是一样的。程序像第一个示例中一样冻结