【发布时间】:2019-11-16 18:28:34
【问题描述】:
我是 Web 开发的新手,我正在尝试使用 python 和 django 为我的服务器编写一个简单的 Web 游戏,并为前端图形使用一些 javascript。我正在使用channels 包来使用 websockets 进行通信,我对 websockets 有一点疑问。
在 python 中,我知道当我们使用套接字时,不能保证消息被完全发送。例如,如果我在 python 中使用socket.send,我可能不会发送整个消息,在这种情况下我需要重新发送剩下的内容,而在接收端,我不能保证使用socket.recv 获得完整的消息(假设bufsize 参数对于完整的消息足够大),所以我必须继续调用recv,直到我收到整个消息。
我的问题是:websockets 是否一样?
我尝试在MDN 文档和谷歌中查找此内容,但找不到任何相关信息。此外,我在网上看到的每个示例都没有考虑到这一点,所以看起来我用socket.send(在javascript中)发送的内容正是我在另一端得到的,反之亦然。
这是真的吗?我可以假设我在客户端使用socket.send 发送的消息将在服务器端的一个事件中完全接收(在我的情况下是websocket consumer),反之亦然:如果服务器发送消息到客户端,它会在客户端的一个Message事件中被完全接收到吗?
提前致谢。
【问题讨论】:
-
Websocket 是在套接字之上的一个抽象级别,就像 HTTP 一样。他们应该已经负责发送块,直到发送完整的消息,以及在接收端。就像您在使用常规 HTTP 客户端或服务器时不必担心这一点一样,您也不应该担心这一点,因为底层的 websocket 客户端应该这样做
标签: javascript python django websocket django-channels