2016-04-30 139 views
1

我的程序使用ZMQ進行通信。也就是說,一個服務器(C++,linux)創建一個XPUB套接字,然後在一個線程中讀取它,在另一個線程中發佈數據(寫入)。在多線程環境中使用ZMQ的正確方法?

客戶端(java,jzmq,linux)創建一個SUB套接字,並訂閱使用它。

經過一段時間後,服務器端在讀線程中收到SIGABRT。

什麼可能是問題的根源?在不同的線程中讀/寫或創建XPUB/SUB對?

如果問題出在多線程中,那麼使用XPUB套接字的正確範例是什麼?

+0

StackOverflow鼓勵根據MCVE代碼的慣例制定高質量的問題,這表明了所提出的問題。如果不這樣做,就只剩下一個猜測。隨意使用此類MCVE代碼更新帖子。 ZeroMQ非常適合構建分佈式(非共享)和智能共享(中央)Context() - 實例生成的套接字可擴展正式通信原型豐富的信令/消息傳遞層,但**在某些情況下詢問是什麼導致了'SIGABRT'我的代碼部署**更適合透視網站,而不是StackOverflow知識共同體,好嗎? – user3666197

回答

2

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

不要線程之間共享ZeroMQ插座。 ZeroMQ套接字不是 線程安全。從技術上講,可以將套接字從一個 線程遷移到另一個套接字,但它需要技巧。 遠程共享線程之間共享套接字的唯一地方是語言 需要做魔術的綁定,比如套接字上的垃圾收集。