Web ZMQ路由器中的客户端维护

Web ZMQ路由器中的客户端维护,web,zeromq,Web,Zeromq,ZeroMQ路由器套接字如何在内部维护其客户端连接 指南说每个客户都有一个唯一的ID,但不清楚: 什么算是客户端每台机器不同的客户端或每个连接的应用程序不同?? 从客户端接收的请求数量是否有限制? 原因是,我正在使用ab对该代码进行压力测试: 当给出命令ab-n 1000-c 10时http://192.168.74.1:8080/ 它偶尔会很好地完成,但很多时候它只是挂起一段时间,然后要么很好地完成,要么在apr\u pollset\u poll中失败:在一些随机数的消息(如300700等)之

ZeroMQ路由器套接字如何在内部维护其客户端连接

指南说每个客户都有一个唯一的ID,但不清楚:

什么算是客户端每台机器不同的客户端或每个连接的应用程序不同?? 从客户端接收的请求数量是否有限制? 原因是,我正在使用ab对该代码进行压力测试:

当给出命令ab-n 1000-c 10时http://192.168.74.1:8080/ 它偶尔会很好地完成,但很多时候它只是挂起一段时间,然后要么很好地完成,要么在apr\u pollset\u poll中失败:在一些随机数的消息(如300700等)之后,指定的超时已过期70007

有趣的是,当ab挂起等待响应时,如果您从不同的机器/浏览器打开不同的连接,它会成功。当ab只是闲逛时,如何从不同浏览器成功建立新连接


所以,想知道这是路由器的“每连接限制”还是其他原因。注意,HWM设置为0

我也在进行基准测试,但使用的是与本文相同代码的python版本。[.而且效果很好,我甚至测试了100000个请求,也很好。也许你可以看看。 如果您发现问题的答案可能是,您也可以通知我们

第一个问题的答案是,每个连接的应用程序都算作一个客户端,并且具有唯一的ID。我设计了一个聊天服务器,其中多个客户端使用唯一的ID连接到路由器套接字

#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;
}