2010-12-06 8 views
6

ich was dich auf den ‚A Anfrage-Antwort-Broker‘ in der Zeromq Dokumentation: http://zguide.zeromq.org/chapter:allKann jemand den Anfrage-Antwort-Broker zeromq Beispiel erklären?

Ich bin mit dem allgemeinen Kern der App bekommen: es wirkt wie ein Vermittler und leiten Nachrichten vom Client zum Server und wieder zurück.

Was ich jedoch nicht bekomme ist, wie es sicherstellt, dass die richtige Antwort von einem Server an den richtigen Client gesendet wird, der ursprünglich die Anfrage gestellt hat. Ich sehe nichts im Codebeispiel, das dafür sorgt.

Jetzt im Beispiel senden sie nur 1 Nachricht (Hallo) und 1 Antwort (Welt), so dass selbst wenn Nachrichten verwechselt werden, ist es egal, aber ich vermute, dass der Testclient und Server absichtlich einfach gehalten werden .

Alle Gedanken sind willkommen ...

Antwort

9

Allen zeromq-Sockets ist implizit eine Identität zugeordnet. (Sie erhalten diese Identität mit zmq_getsockopt().)

Für bidirektionale Socket-Typen, nicht XREQ oder XREP, wird diese Identität automatisch als Teil jeder Nachricht über den Socket übertragen. Der REP-Socket verwendet diese Identität zum Weiterleiten der Antwortnachricht an den entsprechenden Socket. Dies hat den Effekt eines automatischen Routings.

Unter der Haube werden Identitäten über mehrteilige Nachrichten übertragen. Die erste Nachricht in einer mehrteiligen Nachricht enthält die Socket-Identität. Eine leere Nachricht folgt, gefolgt von allen vom Benutzer angegebenen Nachrichten. Die REQ- und REP-Sockets behandeln diese vorangestellten Nachrichten automatisch. Wenn Sie jedoch XREQ- oder XREP-Sockets verwenden, müssen Sie diese Identitätsmeldungen selbst ausfüllen.

Wenn Sie auf der ZMQ Guide nach "identity" suchen, sollten Sie alle Details finden, die Sie jemals darüber wissen möchten, wie Identitäten und Socket-Routing funktioniert.

1

Ok in Kapitel 3 sie ganz plötzlich erklären, dass es ein zugrunde liegendes Konzept einer ‚Hülle‘, die die erf/bzw. Muster invisubly verwendet.

Dies erklärt, wie es funktioniert.