Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中具有长时间休眠的HTTP服务器_Java_Server - Fatal编程技术网

Java中具有长时间休眠的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 {

我想编写一个具有长时间响应的HTTP服务器。 我准备了一个循环:

    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);

结果是一样的。程序像第一个示例中一样冻结