Clientpflege in ZMQ ROUTER

Wie verwaltet der ZeroMQ ROUTER-Socket seine Client-Verbindungen intern?

Der Leitfaden besagt, dass jeder Kunde eine eindeutige ID erhält, aber es ist nicht klar, auf:

Was zählt als Client (jeder Rechner ein anderer Client oder jede verbundene App anders?)Gibt es ein Limit für die Anzahl der Anfragen, die von einem Kunden eingehen?

Der Grund ist, dass ich diesen Code stressteste (vonhttp://hintjens.com/blog:42) mit 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;
}

Wenn der Befehl gegeben wirdab -n 1000 -c 10 http://192.168.74.1:8080/ es wird gelegentlich fertiggestellt, hängt aber oft nur für einige Zeit und wird dann entweder fertiggestellt oder schlägt fehlapr_pollset_poll: The timeout specified has expired (70007) nach einer zufälligen Anzahl von Nachrichten (z. B. 300, 700 usw.)

Der interessante Teil ist, während ab hängt (vielleicht auf Antwort wartet), wenn Sie eine andere Verbindung von einem anderen Computer / Browser öffnen, ist dies in Ordnung. Wie gelingt eine neue Verbindung von einem anderen Browser aus, während ab nur rumhängt?

Fragen Sie sich also, ob dies ein "Pro-Verbindung-Limit" von ROUTER ist oder etwas anderes. Beachten Sie, dass der HWM auf 0 eingestellt ist.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage