zeromqAan de slag met zeromq


Opmerkingen

Deze sectie geeft een overzicht van wat zeromq is en waarom een ontwikkelaar het misschien wil gebruiken.

Het moet ook grote onderwerpen binnen zeromq vermelden en een link naar de gerelateerde onderwerpen bevatten. Aangezien de documentatie voor zeromq nieuw is, moet u mogelijk eerste versies van die gerelateerde onderwerpen maken.

Installatie of instellingen

Zeromq heeft een enorm aantal bindingen voor verschillende talen.

Volg deze om de juiste binding en instructies voor het gebruik te vinden .

U kunt ook gebruiken: een pure C # -implementatie of Java-implementatie

ZeroMQ Hello World-voorbeeld.

In dit voorbeeld maken we een eenvoudige client en server met REQ-REP (verzoek-antwoord) sockets. De client stuurt "Hallo" naar de server, die antwoordt met "Wereld". Server opent een ZeroMQ REP-aansluiting op poort 5555, leest hier aanvragen op en antwoordt met "Wereld" op elke aanvraag.

Hallo wereld-server in C:

#include <zmq.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <assert.h>

int main (void)
{
    //  Socket to talk to clients
    void *context = zmq_ctx_new ();
    void *responder = zmq_socket (context, ZMQ_REP);
    int rc = zmq_bind (responder, "tcp://*:5555");
    assert (rc == 0);

    while (1) {
        char buffer [10];
        zmq_recv (responder, buffer, 10, 0);
        printf ("Received Hello\n");
        sleep (1);          //  Do some 'work'
        zmq_send (responder, "World", 5, 0);
    }
    return 0;
}
 

Hallo Wereld-server in Java:

import org.zeromq.ZMQ;

public class hwserver {

    public static void main(String[] args) throws Exception {
        ZMQ.Context context = ZMQ.context(1);

        //  Socket to talk to clients
        ZMQ.Socket responder = context.socket(ZMQ.REP);
        responder.bind("tcp://*:5555");

        while (!Thread.currentThread().isInterrupted()) {
            // Wait for next request from the client
            byte[] request = responder.recv(0);
            System.out.println("Received Hello");

            // Do some 'work'
            Thread.sleep(1000);

            // Send reply back to client
            String reply = "World";
            responder.send(reply.getBytes(), 0);
        }
        responder.close();
        context.term();
    }
}
 

Hello World-client in C:

#include <zmq.h>
#include <string.h>
#include <stdio.h>
#include <unistd.h>

int main (void)
{
    printf ("Connecting to hello world server…\n");
    void *context = zmq_ctx_new ();
    void *requester = zmq_socket (context, ZMQ_REQ);
    zmq_connect (requester, "tcp://localhost:5555");

    int request_nbr;
    for (request_nbr = 0; request_nbr != 10; request_nbr++) {
        char buffer [10];
        printf ("Sending Hello %d…\n", request_nbr);
        zmq_send (requester, "Hello", 5, 0);
        zmq_recv (requester, buffer, 10, 0);
        printf ("Received World %d\n", request_nbr);
    }
    zmq_close (requester);
    zmq_ctx_destroy (context);
    return 0;
}
 

Hello World-client in Java:

import org.zeromq.ZMQ;

public class hwclient {

    public static void main(String[] args) {
        ZMQ.Context context = ZMQ.context(1);

        //  Socket to talk to server
        System.out.println("Connecting to hello world server…");

        ZMQ.Socket requester = context.socket(ZMQ.REQ);
        requester.connect("tcp://localhost:5555");

        for (int requestNbr = 0; requestNbr != 10; requestNbr++) {
            String request = "Hello";
            System.out.println("Sending Hello " + requestNbr);
            requester.send(request.getBytes(), 0);

            byte[] reply = requester.recv(0);
            System.out.println("Received " + new String(reply) + " " + requestNbr);
        }
        requester.close();
        context.term();
    }
}
 

Opmerking: REQ-REP nul-sockets blokkeren, dus wanneer een client (REQ) een bericht verzendt, kan hij niets anders doen totdat hij een antwoord van de server ontvangt en vice versa - totdat de server (REP) een bericht ontvangt van de klant, hij kan hem niets sturen.