首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WebSockets:无法找到在任何地方定义的websocket_accept方法

WebSockets:无法找到在任何地方定义的websocket_accept方法
EN

Stack Overflow用户
提问于 2021-01-25 16:01:26
回答 1查看 112关注 0票数 0

可能很傻,但我真的搞不懂。

我正在查看Django通道的源代码,以了解哪种方式是手动终止服务器上打开的web套接字连接的最佳方式。然后我注意到WebsocketConsumerWebsocketConsumer方法发送一条websocket.accepthttps://github.com/django/channels/blob/master/channels/generic/websocket.py#L52类型的消息。

根据Django频道文档,这意味着在某个地方有一个名为websocket_accept的方法将在使用者上调用:

使用者是围绕着一系列命名的方法来构造的,这些方法对应于他们将要接收的消息的类型值。代之以_。

但是我在存储库中的任何地方都找不到一个websocket_accept方法(我甚至克隆了它,并将grep‘’ed到它上)。

websocket_closehttps://github.com/django/channels/blob/master/channels/generic/websocket.py#L88也是如此。它的定义在哪里?

所以我想知道这是怎么回事。我解释错了吗?或者这些文档的意思不一样。其他方法应该被调用,而不是我认为它们会调用的方法?

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-01-25 20:18:16

使用者处理程序分为协议处理程序(对websocket使用者(如websocket_disconnect等)预置websocket的处理程序)和实例级处理程序(没有websocket前缀的处理程序,如disconnect)。

协议处理程序通常处理从使用者实例外部通过信道层发送的请求。它可以从下游消费者发送到上游消费者,如果不被当前消费者处理,则进一步向上游发送,直到websocket服务器。

由于ASGI协议是“海龟一路向下”,所有到websocket协议服务器的消费者都有相同的行为,并且具有类似的处理程序。

本质上,您没有看到websocket_accept处理程序,因为通道中没有通用使用者处理它,因此它将由您正在使用的websocket服务器处理。这个特定的事件触发了从HTTP到websocket连接的升级,这是由websocket服务器完成的。类似地,对于websocket_close,它被发送到上游,websocket服务器通过关闭websocket连接来处理它。您可以找到有关在ASGI协议这里中定义的处理程序的更多信息。

请注意,如果您有依赖父使用者的子使用者(如这里实现的多路复用器),那么您可以拥有那些协议处理程序(如websocket_accept ),但必须确保将其进一步发送到websocket服务器上游,否则将无法正确处理,并且不会升级连接。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65888214

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档