小编Seb*_*cht的帖子

JeroMQ正确关闭

我想知道如何正确关闭JeroMQ,到目前为止我知道三种方法都有它们的优点和缺点,我不知道哪一个是最好的.

情况:

  • 线程A:拥有上下文,应提供启动/停止方法
  • 线程B:实际的侦听器线程

我目前的方法:

线程A.

static ZContext CONTEXT = new ZContext();
Thread thread;

public void start() {
    thread = new Thread(new B()).start();
}

public void stop() {
    thread.stopping = true;
    thread.join();
}
Run Code Online (Sandbox Code Playgroud)

线程B.

boolean stopping = false;
ZMQ.Socket socket;

public void run() {
    socket = CONTEXT.createSocket(ROUTER);
    ... // socket setup
    socket.setReceiveTimeout(10);

    while (!stopping) {
        socket.recv();
    }

    if (NUM_SOCKETS >= 1) {
        CONTEXT.destroySocket(socket);
    } else {
        CONTEXT.destroy();
    }
}
Run Code Online (Sandbox Code Playgroud)

这很有用.关机10ms对我来说没有问题,但是当没有收到消息时,我会不必要地增加CPU负载.目前我更喜欢这个.


第二种方法在两个线程之间共享套接字:

线程A.

static ZContext CONTEXT = new ZContext();
ZMQ.Socket socket; …
Run Code Online (Sandbox Code Playgroud)

sockets recv zeromq jeromq

7
推荐指数
1
解决办法
1957
查看次数

标签 统计

jeromq ×1

recv ×1

sockets ×1

zeromq ×1