Python asyncio:通过单个websocket连接多路传输消息
我正在使用Python3.6、asyncio和库。我正在尝试为基于websocket的服务构建一个客户端,其工作原理如下: 客户端可以使用自定义的Python asyncio:通过单个websocket连接多路传输消息,python,websocket,python-asyncio,Python,Websocket,Python Asyncio,我正在使用Python3.6、asyncio和库。我正在尝试为基于websocket的服务构建一个客户端,其工作原理如下: 客户端可以使用自定义的id、方法和一些参数发送JSON请求。作为方法调用的结果,该服务将使用相同的id回送的JSON负载和data进行应答 我希望在这个设备上有一个抽象,它的工作原理如下: wsc=get\u websocket\u connection() 异步def调用方法(方法,**参数): packet=make_json_packet(方法,参数) 等待wsc发送
id
、方法
和一些参数
发送JSON请求。作为方法调用的结果,该服务将使用相同的id
回送的JSON负载和data
进行应答
我希望在这个设备上有一个抽象,它的工作原理如下:
wsc=get\u websocket\u connection()
异步def调用方法(方法,**参数):
packet=make_json_packet(方法,参数)
等待wsc发送(数据包)
resp=wait wsc.recv()
返回解码json数据包(resp)
异步def工作_代码():
分离请求=异步。确保未来(调用方法(“quux”))
第一个结果=等待调用方法(“foo”,x=1)
第二个结果=等待调用方法(“bar”,y=第一个结果)
打印(第二次结果)
返回等待单独的请求
现在,我希望separate\u请求
在处理第一个结果
和第二个结果
时异步等待。但是我不能保证wsc.recv()
调用将返回匹配的响应;事实上,我不能保证服务会按请求的顺序返回响应
我可以使用
id
字段来消除响应的歧义。但是,我如何编写call_method()
,以便它在内部管理请求,并在收到相应的答复时恢复“正确”的协同程序呢?当我以前做过这类事情时,我倾向于将事情分为两部分:
id
s的dict
到函数或Future
s),然后发送请求和响应块id
感兴趣的代码。这也是处理意外关闭的套接字的一个合理位置,它应该在适当的时候将异常推出