thrift資料型別不同引起的傳輸問題

2021-06-25 07:22:56 字數 660 閱讀 7721

最近修改了乙個模組的接收,資料傳輸型別由原來的struct改為了string,測試中接收端出現異常而退出(實際上並非由接收引起,而是由於反序列化未捕捉異常引起),特此總結一下。以下用到的struct只用來說明問題。

(1)接收端呼叫bool send(const string& s),而傳送端呼叫bool send(const student& s)

如果傳送端不是send,則會丟擲異常:沒有這個函式。

而當二者同為send(函式名一樣)時,不會異常,並且傳送和接收均成功。

而這時接收端並沒有發覺,繼續處理後面的事情。後面的**大致是這樣的:先將string push到乙個併發佇列中,然後由其他執行緒處理併發佇列中的資料,處理的第1件事情就是對string進行反序列化。反序列化時未捕獲異常,導致程式core dump退出。原因很簡單:string資料為空。

解決這個問題,要麼捕獲異常,要麼在接收端加上判斷,當string大小為0時返回失敗。

(2)當然將string傳送給乙個接收student的接收端同樣成功,接收到的資料同樣為空。這時可以在struct中約定乙個必填字段,如果該字段為空則返回false。

(3)如果將struct1發往struct2的接收端,則會出現資料解析錯誤:no more data to read.

等同字段修改,可以參考:關於thrift欄位修改的問題

不同資料型別

getwd r語言複習 向量a c 1 10 aclass a a的資料型別 is.numeric a 判斷a是否是數值型 a 2 讀取第二個數值 a 2 5 a c 1,2,5 矩陣?matrix b c 1 15 bnewmatrix matrix b,nrow 3,ncol 5,byrow f...

不同資料型別轉換

nsstring 相關 nsdictionary 轉nsstring 用字串將nsarray的元素拼接起來 nsarray array nsarray arraywithobjects hello world nil nsstring string array componentsjoinedbys...

基本資料型別與引用資料型別的不同

基本資料型別在被建立時,在棧上給其劃分一塊記憶體,將數值直接儲存在棧上。引用資料型別在被建立時,首先要在棧上給其引用 控制代碼 分配一塊記憶體,而物件的具體資訊都儲存在堆記憶體上,然後由棧上面的引用指向堆中物件的位址。例如,有乙個類person,有屬性name,age,帶有參的構造方法,person...