因為公司有需求,對程序模塊之間通信效率有較高的需求。之前公司用的通信組件是ActiveMQ,根據網上公布的測試結果顯示其效率比較低, 后來考慮准備在新的項目中開始使用ZeroMQ。看了幾天發現用起來比較簡單,但是不知道怎么用進我們的項目中,加之項目比較着急就擱淺了,轉而選擇了與socketAPI相近的boost庫中的Asio庫,因為本人比較菜,最近測試發現了各種坑!!!各種坑!!!(對Asio不熟悉的童鞋對新項目慎用)
然后最近就又開始看ZeroMQ,發現網上demo程序不少,但是解釋清楚的很少,所以在這里記錄測試記錄,並督促自己有始有終。官網上有很好的demo程序,我就不貼出來了,要注意的是,demo都是最新的Linux版本的,所以源碼最好也是下載最新的,windows上編譯需要稍微改動。
ZeroMQ推崇模式編程,第一種請求應答沒什么說的。第二種PUB-SUB模式中,服務端沒什么,對客戶端的配置接口有疑問:
int zmq_setsockopt (void *s, int option, const void *optval, size_t optvallen);
參數一:socket句柄;
參數二:socket的模式,這里因為是客戶端,所以是訂閱模式:ZMQ_SUBSCRIBE;
參數三:訂閱關鍵字;
參數四:參數三的長度;
對於參數三,官方文檔:
該接口必須顯示調用,否則為不訂閱,測試結果:
char *filter = (argc > 1) ? argv[1] : ""; rc = zmq_setsockopt(subscriber, ZMQ_SUBSCRIBE, filter, strlen(filter));
不過濾,會訂閱所有信息;
如果
filter = “test ”;
則訂閱以“test ”為開頭的信息,中間出現關鍵字的信息不會接收到,(!!測試中,對於關鍵字中的空格“ ”,linux完全匹配,windows下不同環境測試結果不一致,待驗證);
到這里PUB-SUB模式在一對多的情景中,可以使用了。