Python中文
首页
教程
问答
标签
搜索
登录
注册
Python Gevent Websocket客户端因回传的协议缓冲消息出现错误“解码错误:截断消息”
回答此问题可获得
20
贡献值,回答如果被采纳可获得
50
分。
<p>我有一个简单的websocket服务器,它将所有消息回送给客户机。在</p> <pre><code>import gevent from geventwebsocket.resource import WebSocketApplication from geventwebsocket.server import WebSocketServer from geventwebsocket.resource import Resource import ams_pb2 class AMSWebSocketServer(WebSocketApplication): def __init__(self, ws): super(AMSWebSocketServer, self).__init__(ws) pass def on_open(self): pass def on_message(self, message): print 'received message' print message if message is None: print 'message none' return print 'echo message back' self.ws.send(message) def on_close(self, reason): print "connection closed" gevent.sleep(0) resource = Resource({'/': AMSWebSocketServer}) </code></pre> <p>服务器是使用gunicorn命令生成的</p> ^{pr2}$ <p>我有一个测试客户机,它发送websocket消息以进行回显</p> <pre><code>from ws4py.client.threadedclient import WebSocketClient import ams_pb2 class DummySwitch(WebSocketClient): def closed(self, code, reason=None): pass def received_message(self, msg): if msg is None: print 'none' return print 'received message' ams_message = ams_pb2.AMSConfig() ams_message.ParseFromString(msg) print ams_message print msg if __name__ == '__main__': end_point = 'ws://127.0.0.1:9000' client = DummySwitch( end_point, headers=[ ] ) client.connect() print 'sending message' AMSConfig = ams_pb2.AMSConfig() AMSConfig.CliConfig = True print AMSConfig msg = AMSConfig.SerializeToString() #msg = 'Hello' print msg client.send(msg) client.run_forever() </code></pre> <p>我的protobuff文件是: 包装ams</p> <pre><code>message AMSConfig { optional bool CliConfig = 1; } </code></pre> <p>每当我的客户机向服务器发送protobuff消息时,我都能看到它在服务器中被解析,但是当服务器向客户机回送相同的消息时,客户机由于以下原因而失败:</p> <p>文件“客户_测试.py“,第15行,在接收到的\u消息中 ams公司_message.ParseFromString(消息) 文件“/usr/lib/python2.6/site-packages/google/protobuf/消息.py“,第186行,在ParseFromString中 self.MergeFromString(序列化) 文件“/usr/lib/python2.6/site-packages/google/protobuf/internal/python_消息.py“,第847行,在MergeFromString中 引发消息_模解码错误(“截断消息”。) 解码错误:消息被截断。在</p> <p>发送回给客户机的是一个简单的字符串,我可以看到这个字符串被修改了。但是,客户端无法解析回显的protobuff消息。在</p> <p>我不明白为什么字符串的回显是有效的,但是对于协议缓冲区,它在我的示例中不起作用。在</p> <p>谢谢你的帮助。在</p>
0 条评论
分类:
Python问答
请先
登录
后评论
默认排序
时间排序
1 个回答
匿名
1天前
擅长:python、mysql、java
<p>在我的客户机程序中也遇到这样的问题,因为我将接收缓冲区设置为硬数字1024。当我把接收缓冲区的大小扩大到10*1024时,这个问题就解决了。也谢谢@lulyon的建议。在</p> <p>您可能需要一个从对等代码读取所有数据的循环!在</p>
请先
登录
后评论
针对此问题:
更多的回答
关注
89
关注
收藏
1
收藏,
216
浏览
网友 提问于 2天前
相关Python问题
如何添加虚拟方法
1 回答
如何添加表示整数的擦边字符串?
5 回答
如何添加要在Bokeh中使用的新font.ttf文件?
2 回答
如何添加要显示的矩阵XY轴编号和XY轴
10 回答
如何添加计数?
5 回答
如何添加计数器函数?
3 回答
如何添加计数器列来计算数据帧中另一列中的特定值?
1 回答
如何添加计数器来跟踪while循环中的月份和年份?
10 回答
如何添加计数并删除countplot的顶部和右侧脊椎?
5 回答
如何添加计时器wx.应用程序更新窗口对象的主循环?
5 回答
如何添加评论到帖子?PostDetailVew,Django 2.1.5
6 回答
如何添加评论拉梅尔亚姆
9 回答
如何添加诸如矩阵Python/Pandas之类的数据帧?
2 回答
如何添加谷歌地点自动完成到Flask?
3 回答
如何添加超时、python discord bot
6 回答
如何添加超过1dp的检查
3 回答
如何添加距离方法
1 回答
如何添加跟随游戏的敌人精灵
6 回答
如何添加路径以便python可以找到程序?
9 回答
如何添加身份验证/安全性以使用happybase访问HBase?
4 回答