我是网络开发新手,我正在尝试使用 python 和 django 编写一个简单的网络游戏。对于我的服务器,带有一些用于前端图形的 javascript。我正在使用channels包使用 websockets 进行通信,我有一个关于 websockets 的小问题。
在Python中,我知道当我们使用套接字时,不能保证消息被完全发送。例如,如果我在 python 中使用 socket.send
,我可能不会发送整个消息,在这种情况下我需要重新发送剩下的内容,并且在接收端,我不能保证得到使用socket.recv获取完整消息(假设bufsize参数对于完整消息来说足够大),所以我必须继续调用recv直到我收到了完整的消息。
我的问题是:这与 websockets 是否相同?
我尝试在MDN中寻找这个文档和谷歌,但我找不到任何相关信息。此外,我在网上看到的每个例子都没有考虑到这一点,所以看起来我用 socket.send
(在 JavaScript 中)发送的内容正是我在另一端得到的,反之亦然反之亦然。
这是真的吗?我是否可以假设我在客户端使用 socket.send
发送的消息将在服务器端的一个事件中被完全接收(在我的例子中是 websocket consumer ),反之亦然:如果服务器向客户端发送一条消息,客户端是否会在 JavaScript 中的一个 Message
事件中完全接收该消息?
提前致谢。
最佳答案
您可以假设如果客户端已连接,就会收到该消息。反之亦然,服务器将接收它正在监听的消息。
Django Channel 确实不可靠。
在这些 channel 上调用 receive 并不能保证您将按顺序收到消息,或者如果 channel 非空,您将获得任何内容。
https://channels.readthedocs.io/en/latest/channel_layer_spec.html#channel-semantics
关于javascript - Websocket 是否发送和接收完整消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56914609/