我的程序使用 ZMQ 进行通信。即,服务器(C++,Linux)创建一个 XPUB 套接字,然后在一个线程中读取它,并在另一个线程中发布数据(写入)。
客户端(java、jzmq、linux)创建一个 SUB 套接字,并使用它进行订阅。
一段时间后,服务器端在读取线程中收到 SIGABRT。
什么可能是问题的根源?在不同的线程中读/写或创建 XPUB/SUB 对?
如果问题出在多线程中,那么使用 XPUB 套接字的正确范例是什么?
我的程序使用 ZMQ 进行通信。即,服务器(C++,Linux)创建一个 XPUB 套接字,然后在一个线程中读取它,并在另一个线程中发布数据(写入)。
客户端(java、jzmq、linux)创建一个 SUB 套接字,并使用它进行订阅。
一段时间后,服务器端在读取线程中收到 SIGABRT。
什么可能是问题的根源?在不同的线程中读/写或创建 XPUB/SUB 对?
如果问题出在多线程中,那么使用 XPUB 套接字的正确范例是什么?
http://zguide.zeromq.org/page:all#Multithreading-with-ZeroMQ
不要在线程之间共享 ZeroMQ 套接字。ZeroMQ 套接字不是线程安全的。从技术上讲,可以将套接字从一个线程迁移到另一个线程,但这需要技巧。在线程之间共享套接字的唯一地方是在语言绑定中需要像套接字上的垃圾收集这样的魔法。