ZeroMQ ROUTER套接字如何在內部維護其客戶端連接。ZMQ ROUTER中的客戶端維護
資料說每個客戶端獲得一個唯一ID,但目前尚不清楚的:
- 作爲客戶機(每臺機器不同客戶或不同的每個連接的應用程序?)
- 怎樣纔算從客戶收到的請求數量是否有限制?
的原因是,我的壓力測試代碼(來自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.