【问题标题】:HTTP server in Java with long time reposnseJava中的HTTP服务器,响应时间长
【发布时间】:2014-12-05 21:50:01
【问题描述】:

我想写一个响应时间长的 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() 时一切正常,但我不想在这个地方关闭连接,因为我需要很长时间的响应。

【问题讨论】:

    标签: java server


    【解决方案1】:

    查看ServerSocketChannel的javadoc:

    "如果此通道处于非阻塞模式,那么如果没有挂起的连接,此方法将立即返回 null。否则它将无限期阻塞,直到有新的连接可用或发生 I/O 错误。”

    这似乎描述了您正在经历的“冻结”。

    您可以在非阻塞模式下打开您的 ServerSocketChannel:

    serverSocketChannel.configureBlocking(false);
    

    【讨论】:

    • 结果是一样的。该程序像第一个示例一样冻结
    猜你喜欢
    • 2017-02-12
    • 2021-04-14
    • 1970-01-01
    • 1970-01-01
    • 2017-01-26
    • 1970-01-01
    • 2021-09-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多