Search in sources :

Example 16 with Socket

use of org.zeromq.ZMQ.Socket in project jeromq by zeromq.

the class clonesrv4 method run.

public void run() {
    ZContext ctx = new ZContext();
    Socket snapshot = ctx.createSocket(ZMQ.ROUTER);
    snapshot.bind("tcp://*:5556");
    Socket publisher = ctx.createSocket(ZMQ.PUB);
    publisher.bind("tcp://*:5557");
    Socket collector = ctx.createSocket(ZMQ.PULL);
    collector.bind("tcp://*:5558");
    Poller poller = ctx.createPoller(2);
    poller.register(collector, Poller.POLLIN);
    poller.register(snapshot, Poller.POLLIN);
    long sequence = 0;
    while (!Thread.currentThread().isInterrupted()) {
        if (poller.poll(1000) < 0)
            //  Context has been shut down
            break;
        // apply state updates from main thread
        if (poller.pollin(0)) {
            kvsimple kvMsg = kvsimple.recv(collector);
            if (//  Interrupted
            kvMsg == null)
                break;
            kvMsg.setSequence(++sequence);
            kvMsg.send(publisher);
            clonesrv4.kvMap.put(kvMsg.getKey(), kvMsg);
            System.out.printf("I: publishing update %5d\n", sequence);
        }
        // execute state snapshot request
        if (poller.pollin(1)) {
            byte[] identity = snapshot.recv(0);
            if (identity == null)
                //  Interrupted
                break;
            //  .until
            //  Request is in second frame of message
            String request = snapshot.recvStr();
            if (!request.equals("ICANHAZ?")) {
                System.out.println("E: bad request, aborting");
                break;
            }
            String subtree = snapshot.recvStr();
            Iterator<Entry<String, kvsimple>> iter = kvMap.entrySet().iterator();
            while (iter.hasNext()) {
                Entry<String, kvsimple> entry = iter.next();
                kvsimple msg = entry.getValue();
                System.out.println("Sending message " + entry.getValue().getSequence());
                this.sendMessage(msg, identity, subtree, snapshot);
            }
            // now send end message with getSequence number
            System.out.println("Sending state snapshot = " + sequence);
            snapshot.send(identity, ZMQ.SNDMORE);
            kvsimple message = new kvsimple("KTHXBAI", sequence, ZMQ.SUBSCRIPTION_ALL);
            message.send(snapshot);
        }
    }
    System.out.printf(" Interrupted\n%d messages handled\n", sequence);
    ctx.destroy();
}
Also used : Entry(java.util.Map.Entry) ZContext(org.zeromq.ZContext) Socket(org.zeromq.ZMQ.Socket) Poller(org.zeromq.ZMQ.Poller)

Example 17 with Socket

use of org.zeromq.ZMQ.Socket in project jeromq by zeromq.

the class rrclient method main.

public static void main(String[] args) {
    Context context = ZMQ.context(1);
    //  Socket to talk to server
    Socket requester = context.socket(ZMQ.REQ);
    requester.connect("tcp://localhost:5559");
    System.out.println("launch and connect client.");
    for (int request_nbr = 0; request_nbr < 10; request_nbr++) {
        requester.send("Hello", 0);
        String reply = requester.recvStr(0);
        System.out.println("Received reply " + request_nbr + " [" + reply + "]");
    }
    requester.close();
    context.term();
}
Also used : Context(org.zeromq.ZMQ.Context) Socket(org.zeromq.ZMQ.Socket)

Example 18 with Socket

use of org.zeromq.ZMQ.Socket in project jeromq by zeromq.

the class syncpub method main.

public static void main(String[] args) {
    Context context = ZMQ.context(1);
    //  Socket to talk to clients
    Socket publisher = context.socket(ZMQ.PUB);
    publisher.setLinger(5000);
    // In 0MQ 3.x pub socket could drop messages if sub can follow the generation of pub messages
    publisher.setSndHWM(0);
    publisher.bind("tcp://*:5561");
    //  Socket to receive signals
    Socket syncservice = context.socket(ZMQ.REP);
    syncservice.bind("tcp://*:5562");
    System.out.println("Waiting subscribers");
    //  Get synchronization from subscribers
    int subscribers = 0;
    while (subscribers < SUBSCRIBERS_EXPECTED) {
        //  - wait for synchronization request
        syncservice.recv(0);
        //  - send synchronization reply
        syncservice.send("", 0);
        subscribers++;
    }
    //  Now broadcast exactly 1M updates followed by END
    System.out.println("Broadcasting messages");
    int update_nbr;
    for (update_nbr = 0; update_nbr < 1000000; update_nbr++) {
        publisher.send("Rhubarb", 0);
    }
    publisher.send("END", 0);
    // clean up
    publisher.close();
    syncservice.close();
    context.term();
}
Also used : Context(org.zeromq.ZMQ.Context) Socket(org.zeromq.ZMQ.Socket)

Example 19 with Socket

use of org.zeromq.ZMQ.Socket in project jeromq by zeromq.

the class lpserver method main.

public static void main(String[] argv) throws Exception {
    Random rand = new Random(System.nanoTime());
    Context context = ZMQ.context(1);
    Socket server = context.socket(ZMQ.REP);
    server.bind("tcp://*:5555");
    int cycles = 0;
    while (true) {
        String request = server.recvStr();
        cycles++;
        //  Simulate various problems, after a few cycles
        if (cycles > 3 && rand.nextInt(3) == 0) {
            System.out.println("I: simulating a crash");
            break;
        } else if (cycles > 3 && rand.nextInt(3) == 0) {
            System.out.println("I: simulating CPU overload");
            Thread.sleep(2000);
        }
        System.out.printf("I: normal request (%s)\n", request);
        //  Do some heavy work
        Thread.sleep(1000);
        server.send(request);
    }
    server.close();
    context.term();
}
Also used : Context(org.zeromq.ZMQ.Context) Random(java.util.Random) Socket(org.zeromq.ZMQ.Socket)

Example 20 with Socket

use of org.zeromq.ZMQ.Socket in project jeromq by zeromq.

the class ZPoller method dispatch.

/**
     * Dispatches the polled events.
     *
     * @param all   the items used for dispatching
     * @param size  the number of items to dispatch
     * @return true if correctly dispatched, false in case of error
     */
protected boolean dispatch(final Collection<ItemHolder> all, int size) {
    ItemHolder[] array = all.toArray(new ItemHolder[all.size()]);
    // protected against handlers unregistering during this loop
    for (ItemHolder holder : array) {
        EventsHandler handler = holder.handler();
        if (handler == null) {
            handler = globalHandler;
        }
        if (handler == null) {
            // no handler, short-circuit
            continue;
        }
        final zmq.PollItem item = holder.item();
        final int events = item.readyOps();
        if (events <= 0) {
            // no events, short-circuit
            continue;
        }
        final Socket socket = holder.socket();
        final SelectableChannel channel = holder.item().getRawSocket();
        if (socket != null) {
            assert (channel == null);
            // dispatch on socket
            if (!handler.events(socket, events)) {
                return false;
            }
        }
        if (channel != null) {
            // dispatch on channel
            assert (socket == null);
            if (!handler.events(channel, events)) {
                return false;
            }
        }
    }
    return true;
}
Also used : SelectableChannel(java.nio.channels.SelectableChannel) Socket(org.zeromq.ZMQ.Socket)

Aggregations

Socket (org.zeromq.ZMQ.Socket)84 Context (org.zeromq.ZMQ.Context)32 ZContext (org.zeromq.ZContext)30 Test (org.junit.Test)26 Poller (org.zeromq.ZMQ.Poller)20 ZMsg (org.zeromq.ZMsg)14 Random (java.util.Random)13 ZFrame (org.zeromq.ZFrame)13 PollItem (org.zeromq.ZMQ.PollItem)6 ByteBuffer (java.nio.ByteBuffer)4 ArrayList (java.util.ArrayList)4 SelectableChannel (java.nio.channels.SelectableChannel)3 HashMap (java.util.HashMap)3 IOException (java.io.IOException)2 LinkedList (java.util.LinkedList)2 Entry (java.util.Map.Entry)2 Ignore (org.junit.Ignore)2 Actor (org.zeromq.ZActor.Actor)2 BufferedWriter (java.io.BufferedWriter)1 File (java.io.File)1