在多线程环境中使用 ZMQ 的正确方法?

Right way to use ZMQ in multi threaded environment?

我的程序使用ZMQ进行通信。即,服务器(C++,linux)创建一个 XPUB 套接字,然后在一个线程中读取它,在另一个线程中发布数据(写入)。

客户端(java、jzmq、linux)创建一个 SUB 套接字,并使用它进行订阅。

一段时间后,服务器端在读取线程中收到SIGABRT。

问题的根源可能是什么? Read/Write 在不同的线程中或创建 XPUB/SUB 对?

如果问题出在多线程中,使用 XPUB 套接字的正确范例是什么?

http://zguide.zeromq.org/page:all#Multithreading-with-ZeroMQ

Don't share ZeroMQ sockets between threads. ZeroMQ sockets are not threadsafe. Technically it's possible to migrate a socket from one thread to another but it demands skill. The only place where it's remotely sane to share sockets between threads are in language bindings that need to do magic like garbage collection on sockets.