2014-04-26 43 views
1

ZeroMQ ROUTER套接字如何在內部維護其客戶端連接。ZMQ ROUTER中的客戶端維護

資料說每個客戶端獲得一個唯一ID,但目前尚不清楚的:

  1. 作爲客戶機(每臺機器不同客戶或不同的每個連接的應用程序?)
  2. 怎樣纔算從客戶收到的請求數量是否有限制?

的原因是,我的壓力測試代碼(來自http://hintjens.com/blog:42)與AB:

#include "czmq.h" 

int main(void) 
{ 
    zctx_t *ctx = zctx_new(); 
    void *router = zsocket_new(ctx, ZMQ_ROUTER); 
    zsocket_set_router_raw(router, 1); 
    zsocket_set_sndhwm(router, 0); 
    zsocket_set_rcvhwm(router, 0); 
    int rc = zsocket_bind(router, "tcp://*:8080"); 
    assert(rc != -1); 

    while (true) 
    { 
     // Get HTTP request 
     zframe_t *handle = zframe_recv(router); 
     if (!handle) break;   // Ctrl-C interrupt 
     char *request = zstr_recv(router); 
     puts(request);  // Professional Logging(TM) 
     free(request);  // We throw this away 

     // Send Hello World response 
     zframe_send(&handle, router, ZFRAME_MORE + ZFRAME_REUSE); 
     zstr_send(router, "HTTP/1.0 200 OK\r\n""Content-Type: text/plain\r\n""\r\n""Hello, World!"); 

     // Close connection to browser 
     zframe_send(&handle, router, ZFRAME_MORE); 
     zmq_send(router, NULL, 0, 0); 
    } 
    zctx_destroy(&ctx); 
    return 0; 
} 

當給出的命令ab -n 1000 -c 10 http://192.168.74.1:8080/偶爾完成很好,但很多時候它只是掛了一段時間,然後在apr_pollset_poll: The timeout specified has expired (70007)之後完成正常或失敗,在一些隨機數量的消息(比如300,700等)後

有趣的部分是,雖然ab掛起(可能等待響應),但如果您打開不同的連接不同的機器/瀏覽器,它成功罰款。來自不同瀏覽器的新連接是如何成功的,而ab只是在附近?

因此,想知道這是否是ROUTER的「每個連接限制」或其他事情正在進行。注意,HWM設置爲0.

回答

0

我也一直在進行基準測試,但是使用了與此處給出的相同代碼的python版本。 [https://gist.github.com/malexer/8664997]。它的工作正常,我甚至測試了100000個請求,也很好。也許你可以看看它。 如果您發現問題的答案可能是您也可以通知我們。

您的第一個問題的答案是,每個連接的應用程序計爲一個客戶端,並具有唯一的ID。我設計了一個聊天服務器,其中多個客戶端連接到路由器套接字 - 每個都有一個唯一的ID。