繁体   English   中英

python-socketio asyncio 客户端:是否可以知道 emit 何时完全通过网络将数据发送到服务器?

[英]python-socketio asyncio client: Is it possible to know when emit is completelly send data over the wire to server?

python-socketio 或底层 python-engineio 是否有任何类型的确认特定消息已完全传递到另一方,类似于 TCP 所做的确保所有数据已成功传输到另一方?

我有一种建立在 python-socketio 服务器上的 pubsub 服务,当请求被处理后,它会发回 ok/error 状态。 但是在我的 python-socketio 客户端中,有时我只需要开火并忘记一些消息到 pubsub 但我必须等待它完全交付才能终止我的应用程序。

所以,我天真的代码:

await sio.emit("publish", {my message})

上面的 await 似乎只是安排通过线路发送到 asyncio,但不等待发送完成。 我想这是设计使然。 只需要知道是否可以知道发送何时完成。

Socket.IO 具有 ACK 数据包,可用于接收方确认收到事件。

使用Python客户端和服务端时,可以将emit()换成call()等待ack收到。 call()的返回值是对方在确认中返回的任何数据。

但这并不是说另一方也需要扩展以发送此 ACK 数据包。 如果您的另一端也是 Python,事件处理程序可以简单地通过从处理程序 function 返回一些内容来发出 ACK。您返回的数据包含在 ACK 数据包中。 如果另一端是 JavaScript,您将收到回调 function 作为最后一个参数传递给您的处理程序。 处理程序需要调用此 function 传递它想要发送给另一方的任何数据作为响应。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM