1. 程式人生 > >thrift TSocket read 0 bytes(string型別中的一個坑)

thrift TSocket read 0 bytes(string型別中的一個坑)

最近把thrif從0.9版本升級到0.10版本之後,一些一直在報thrift TSocket read 0 bytes 錯誤。
此篇文章記錄thrift中的一個坑。
從thrift的官方文件中可以知道,如下:

Base Types
The base types were selected with the goal of simplicity
and clarity rather than abundance, focusing on the key types available
in all programming languages.

bool: A boolean value (true or false)
byte: An 8-bit signed integer
i16: A 16-bit signed integer
i32: A 32-bit signed integer
i64: A 64-bit signed integer
double: A 64-bit floating point number
string: A text string encoded using UTF-8 encoding

注意最後一句加粗的地方 A text string encoded using UTF-8 encoding。使用utf8編碼的string型別。
因為官方手冊給出的demo都是英文的string型別,所以執行起來是不會報錯的。但是在我們的實際專案中,往往是有中文的。
因此,我這裡做了一個統一處理:

def serialize_to(obj, tobj):
    tobj = tobj()
    for k, v in tobj.__dict__.iteritems():
        value = getattr(obj, k)
        if isinstance(value, datetime):
            value = int(datetime2utc(value))
        if
isinstance(value, unicode): # 注意這裡 # value = value.encode('utf8') pass setattr(tobj, k, value) return tobj

注意註釋掉的部分,按照上面官方文件中說的,通過utf8對字元encode。結果server啟動之後client訪問就會報錯TSocket read 0 bytes

最終一步一步排查,終於發現此問題。
版本升級要謹慎。!!

相關推薦

thrift TSocket read 0 bytes(string型別一個)

最近把thrif從0.9版本升級到0.10版本之後,一些一直在報thrift TSocket read 0 bytes 錯誤。 此篇文章記錄thrift中的一個坑。 從thrift的官方文件中可以知道,如下: Base Types The b

python使用thrift出現TTransportException: TSocket read 0 bytes

今天使用python寫的thrift客戶端來連線server,server收不到任何request。 client端出現了這個exception Traceback (most recent call last): ... ... ... message='TSocket

hue集成hbase出現TSocket read 0 bytes

cor hdfs bytes hba sin hdf 集成 name 啟動 解決辦法:修改hbase的配置文件 添加以下配置 https://stackoverflow.com/questions/20415493/api-error-tsocket-read-0-byte

happybase(TSocket read 0 bytes)

關於報錯 happybase 是使用python連線hbase的一個第三方庫,目前基於thrift1 。在

python藉助pysh2連線hiveserver2操作hive資料庫時thrift.transport.TTransport.TTransportException: TSocket read 0

2017-10-12T14:20:45,755 INFO [HiveServer2-Handler-Pool: Thread-42] session.SessionState: Resetting thread name to HiveServer2-Handler-Pool: Thread-42 201

web服務連線mysql報錯 解析:Can not read response from server. Expected to read 4 bytes, read 0 bytes before c

報錯內容: The last packet successfully received from the server was 3,087,649 milliseconds ago.  The last packet sent successfully to the ser

String型別 "=="和"equals"比較的差別

String型別中 "=="和"equals"比較的差別 先說明一下String型別的變數的建立方式 在建立新的String型別的變數時,首先會在緩衝區查詢是否有這個產量對應的物件,有就直接將找到的物件的地址賦給新建立的變數,沒有就重新建立一個物件,然後賦給新建立的變數 String

頭像上傳剪裁預覽功能js實現,以及Safari一個

// 彈窗 layui.use('layer', function(){ var layer = layui.layer; // 上傳圖片 $('.tc').click(function(){ layer

【Redis】在java的使用-存取string型別

我們知道,redis為非關係型資料庫,說明它也是一個數據庫。對其進行操作有兩個基本途徑: 客戶端redis-cli中的操作 在java程式碼中的使用 那今天我們就以存取string型別的資料為例來簡單說說使用。 客戶端中的操作

C++int型別String型別的相互轉換

最近經常用到兩種型別的相互轉換,從網上找了一些,彙總一下,以備不時之需 int型別轉換為String型別 方法一:利用sprintf #include <iostream> #include <string> int main() { int n =

Python 3bytes/string的區別

如何 strings 插入圖片 enc 混合 技術分享 cnblogs 劃分 比特 原文: https://www.cnblogs.com/abclife/p/7445222.html python 3中最重要的新特性可能就是將文本(text)和二進制數據做了更清晰的區分。

mysqlString型別日期比較

    1、資料庫中欄位createtime型別為String,格式為:06-08-2018 10:50:24;     2、以createtime做條件做時間範圍內的查詢操作:    將String轉為date: <

jsString型別的常用方法

js中String型別的常用方法 var str1 = new String(“hello”); var str2 = new String(“hello”); document.write(“兩個字串的物件一樣嗎?”+(str1.toString()==str2.toString(

jsstring型別與number型別的轉換以及字串的基本常見操作

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, i

JavaString型別轉換成日期型別

Java中String型別轉換成資料庫中的日期型別,新增到資料庫 //建立sdf物件,指定日期格式型別 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); //sdf將字串轉化成java.util.D

ORCALE資料庫Date型別資料用String型別接收收出現.0情況也就是顯示毫秒數

如: {    "createdate": "2018-11-28 14:53:24.0", } 但是資料庫中查詢結果並沒有毫秒數    解決方案     public void setCreat

python2/3 將base64資料寫成圖片,並將圖片資料轉為16進位制資料的方法、bytes/string的區別

1.python2將base64資料寫成圖片,並將資料轉為16進位制字串的方法 import binascii img = u'R0lGODlhagAeAIcAAAAAAAAARAAAiAAAzABEAABERABEiABEzACIAACIRACIiACIzADMAADMRADMiADMzADd3

在程式使String型別編號自增,例如001,002

/* bumen:定義的變數 bumenService:定義的類 按照自己定義的類就可以 */ //定義一個字串 String ii="00"; //查詢出該欄位最大數 String bumen1= b

String型別json格式的資料轉換巢狀到JSON物件傳遞

原是String型別的資料,但是其格式是json。通過轉換拼接到JSON物件中傳遞。 使用的maven 倉庫: <dependency> <groupId>com.alib

Python的字串string型別基礎

字串基礎 定義 字串屬於python中的一個序列物件(sequence object),一串字元為元素的序列物件。 S = 'hello world!' S = "hello world!" S = '''hello world!''' 訪問