gpt4 book ai didi

python - 在 Django Channels 中重用现有的 websocket

转载 作者:太空宇宙 更新时间:2023-11-04 04:37:57 24 4
gpt4 key购买 nike

我正在半认真地使用 Python 在受限访问系统和 GAE 应用程序之间创建一种看门人服务器。在可能继续讨论与代码相关的特定问题之前,我将从一个更笼统的问题开始。

概览

限制访问系统使用命令行 Python 应用程序设置,该应用程序打开到中间服务器上运行的 Django Channels 应用程序的 WebSocket 连接,并开始发送 Django 应用程序确认的常规心跳帧。到目前为止,一切都很好。时不时地,Django 应用程序会收到一个 HTTP 请求,它会验证该请求,如果通过,它会向其他系统发送指令。现在,为了提高效率,我有了重新使用现有 WS 连接并搭载指令框架的想法。

问题

Django 允许我轻松地在套接字上接收帧,并对所述帧进行操作。我遇到的问题是通过现有管道发送一条消息:我这辈子都不能调用 WebsocketConsumer.send() 方法,即使是通过包装器,也是 < em>不在消费者中,但在其他地方定义并接收消费者作为参数(到目前为止我能想到的最好的)。甚至有可能吗(this question 指向它实际上不可能是可能的)?

在此先感谢您的指点。如果需要,明天我可以用我的类(class)更新问题。

最佳答案

也许已经太晚了,但您需要做的是直接向应用程序正在收听的 channel 或群组发送消息。 Channels 会将您的消息路由到适当的消费者方法。

因此,假设您想在服务于您的其他应用程序(例如 channel1)的消费者中调用 send_message 方法:您应该这样做:

from channels.layers import get_channel_layer
from asgiref.sync import async_to_sync

channel_layer = get_channel_layer()
sync_to_async(channel_layer.send)("channel1", {
"type": "send.message",
"text": "Hello there!",
})

这可以在您的代码中的任何位置完成。

您链接的问题使用与 Django channel 完全不同的 Tornado websockets。我不知道是否可以使用 Tornado ,但使用 channel 肯定可以

关于python - 在 Django Channels 中重用现有的 websocket,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51251515/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com