使用Java没有与nginx-clojure的并发连接

时间:2017-07-28 14:48:28

标签: nginx ubuntu-16.04

我使用nginx-clojure-0.4.5为Ubuntu 16.04构建nginx-1.13.1。

我使用了来自nginx-clojure站点的示例java代码(见下文),但在响应之前插入了1秒的睡眠。然后我启动了10个curl http调用来调用我的java代码。我预计10秒后所有10个curl http调用会同时或多或少地返回。但是,然后以1秒的间隔一次返回一个。这意味着nginx和/或nginx-clojure不是同时处理它们,而是串行处理它们。应该这样做吗?这是控制台输出:

ubuntu:/share/java$ ./launchControllers.sh 10
Fri 28 Jul 15:27:21 BST 2017
curl http://localhost:80/myJava/1 &
curl http://localhost:80/myJava/2 &
curl http://localhost:80/myJava/3 &
curl http://localhost:80/myJava/4 &
curl http://localhost:80/myJava/5 &
curl http://localhost:80/myJava/6 &
curl http://localhost:80/myJava/7 &
curl http://localhost:80/myJava/8 &
curl http://localhost:80/myJava/9 &
curl http://localhost:80/myJava/10 &
Fri 28 Jul 15:27:21 BST 2017
ubuntu:/share/java$ 
2017-07-28 15:27:23: Hello, Java & NGINX!
2017-07-28 15:27:24: Hello, Java & NGINX!
2017-07-28 15:27:25: Hello, Java & NGINX!
2017-07-28 15:27:26: Hello, Java & NGINX!
2017-07-28 15:27:27: Hello, Java & NGINX!
2017-07-28 15:27:28: Hello, Java & NGINX!
2017-07-28 15:27:29: Hello, Java & NGINX!
2017-07-28 15:27:30: Hello, Java & NGINX!
2017-07-28 15:27:31: Hello, Java & NGINX!
2017-07-28 15:27:32: Hello, Java & NGINX!

这是我的nginx-clojure java调用方法:

public Object[] invoke( Map<String, Object> request ) {
    try {
        Thread.sleep( 1000 );
    }
    catch ( Throwable t ) {
        t.printStackTrace( System.err );
    }

    return new Object[] {
            NGX_HTTP_OK,    //http status 200
            ArrayMap.create( CONTENT_TYPE, "text/plain" ),    //headers map
            new SimpleDateFormat( TS_FORMAT ).format( new Date() ) + ": " +
            "Hello, Java & NGINX!\n"    //response body can be string, File or Array/Collection of them
    };
}

我还尝试将sleep替换为等待udp数据包并产生100个curl http调用的upd套接字(每个udp套接字监听唯一的端口号)。由此产生的行为非常奇怪。即使我向每个udp端口发送了一个数据包,http调用也会挂起,我必须单独终止curl调用。为什么nginx / nginx-closure表现得像这样?

1 个答案:

答案 0 :(得分:0)

尝试nginx-clojure线程池模式,例如

jvm_workers 40;

或者使用多个Nginx工作进程,例如

worker_processes 8;

可以从https://nginx-clojure.github.io/more.html#311-more-about-nginx-worker-process

找到更多说明