网络套接字是否发送和接收完整消息?

时间:2019-07-06 13:36:55

标签: javascript python django websocket django-channels

我是Web开发的新手,我正在尝试使用python和django为服务器编写一个简单的网络游戏,并为前端图形添加一些javascript。我正在使用channels软件包来使用websockets进行通信,但是我对websockets有点疑问。

在python中,我知道当我们使用套接字时,不能保证消息会完全发送。例如,如果我在python中使用socket.send,则可能无法发送完整的消息,在这种情况下,我需要重新发送剩余的消息,并且在接收方,我不能保证使用{ {1}}(假设socket.recv参数足以容纳完整的消息),因此我必须不断调用bufsize直到获得完整的消息。

我的问题是:websocket是否相同?

我尝试在MDN文档和Google中寻找此信息,但找不到任何相关信息。另外,我在网上看到的每个示例都没有考虑到这一点,因此,我用recv(使用javascript)发送的内容似乎恰恰是我从另一端得到的内容,反之亦然。

是真的吗?我是否可以假设我在客户端通过socket.send发送的消息会在服务器端的一个事件(在我的情况下为websocket consumer)中被完全接收,而在另一种情况下:服务器发送一条消息给客户端,客户端会在一个socket.send事件中完全接收到该消息吗?

谢谢。

1 个答案:

答案 0 :(得分:0)

您可以假定如果连接了客户端,则会收到该消息。反之亦然,即服务器将收到它正在侦听的消息。

Django Channel确实不可靠。

Calling receive on these channels does not guarantee that you will get the messages in order or that you will get anything if the channel is non-empty.

https://channels.readthedocs.io/en/latest/channel_layer_spec.html#channel-semantics