这几天使用Python3.7 flask thrift0.13搭建rpc服务,服务运行起来后测试访问,报错tsocket read 0 bytes,调试了几个地方也没有解决,希望熟悉这方面的大神,能耐心指点一下,谢谢。
从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
1
2
3
4
5
6
7
8
9
10
11
12
13
注意注释掉的部分,按照上面官方文档中说的,通过utf8对字符encode。结果server启动之后client访问就会报错TSocket read 0 bytes。
最终一步一步排查,终于发现此问题。 版本升级要谨慎。!!
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。