ZMQ釋出-訂閱模式踩坑之——訊息丟失部分
如題
最近在研究釋出訂閱者模式時,網上找的例子執行後沒啥問題,但自己將其嵌入生產者消費者模式之後,出現了訂閱端收到訊息丟失很大一部分的問題。後逐漸排查,問題出在這裡:
zmq_send(publisher, sdata.c_str(), sizeof(sdata.c_str()) + 1, 0);
原因是zmq_send()函式第二個引數型別是void *,我在這之前要傳送的訊息是string型別,然後想當然的呼叫了c_str()函式將其轉為字串樣式。結果訂閱端收到缺胳膊少腿的訊息。。。
注意
語法:
const char c_str();
c_str()函式返回一個指向正規C字串的指標, 內容與本string串相同.
這是為了與c語言相容,在c語言中沒有string型別,故必須通過string類物件的成員函式c_str()把string 物件轉換成c中的字串樣式。
注意:一定要使用strcpy()函式 等來操作方法c_str()返回的指標
比如:最好不要這樣:
char c;
string s=“1234”;
c = s.c_str(); //c最後指向的內容是垃圾,因為s物件被析構,其內容被處理
應該這樣用:
char c[20];
string s=“1234”;
strcpy(c,s.c_str());
這樣才不會出錯,c_str()返回的是一個臨時指標,不能對其進行操作
再舉個例子
c_str() 以 char* 形式傳回 string 內含字串
如果一個函式要求char*引數,可以使用c_str()方法:
string s = “Hello World!”;
printf("%s", s.c_str()); //輸出 “Hello World!”
看到這裡應該明白了,要想將其正確轉為字元陣列,使用c_str()必須通過呼叫strcpy()函式方才可以返回正確的字元指標,以進行後續操作。
菜鳥努力中,重在堅持,加油!
參考老哥的部落格:
c++ 中 char 與 string 之間的相互轉換問題
相關文章
- 設計模式之釋出訂閱模式(2) Redis 釋出/訂閱模式設計模式Redis
- 設計模式之釋出訂閱模式(1) 一文搞懂釋出訂閱模式設計模式
- Redis實現訊息釋出訂閱Redis
- Redis的訊息釋出和訂閱Redis
- 釋出訂閱模式模式
- 使用Spring Data Redis 釋出訂閱訊息SpringRedis
- 釋出於訂閱訊息系統-KafkaKafka
- SQLSERVER2008釋出訂閱(踩坑)增量同步資料SQLServer
- js訊息訂閱和釋出實現元件之間通訊JS元件
- 奇技淫巧之釋出訂閱模式模式
- C#設計模式之訂閱釋出模式C#設計模式
- javascript設計模式 之 5 釋出-訂閱模式JavaScript設計模式
- SpringBoot+Redis 實現訊息訂閱釋出Spring BootRedis
- JS訂閱釋出模式JS模式
- javascript中的設計模式之釋出-訂閱模式JavaScript設計模式
- vue - Vue腳手架/訊息訂閱與釋出Vue
- 輕鬆上手 PHP + RabbitMQ 訊息釋出與訂閱PHPMQ
- Redis 釋出訂閱模式:原理拆解並實現一個訊息佇列Redis模式佇列
- Javascript(七)釋出-訂閱模式JavaScript模式
- 釋出訂閱模式學習模式
- 每天一個設計模式之訂閱-釋出模式設計模式
- 觀察者模式-訂閱釋出模式模式
- js設計模式--釋出訂閱模式JS設計模式
- C++釋出訂閱者模式:實現簡單訊息傳遞系統C++模式
- 行為型:釋出訂閱模式模式
- MQTT 釋出/訂閱模式介紹MQQT模式
- Spring 中的釋出-訂閱模式Spring模式
- JavaScript 設計模式之觀察者模式與釋出訂閱模式JavaScript設計模式
- Spring原始碼之七registerListeners()及釋出訂閱模式Spring原始碼模式
- RabbitMQ 入門(六)SpringAMQP五種訊息型別(釋出訂閱模式和Fanout Exchange )MQSpringGAM型別模式
- springboot整合redis實現訊息釋出訂閱模式-雙通道(跨多伺服器)Spring BootRedis模式伺服器
- js 觀察者模式 訂閱釋出模式JS模式
- JavaScript設計模式系列--釋出訂閱模式JavaScript設計模式
- 觀察者模式 vs 釋出訂閱模式模式
- JS設計模式七:釋出-訂閱模式JS設計模式
- 基於Redis訊息的訂閱釋出應用場景Redis
- 設計模式讀書筆記之原型模式、釋出訂閱模式設計模式筆記原型
- 設計模式學習之觀察者模式和釋出訂閱模式設計模式