API 请求已打开的 django 通道消费者
API request to already opened django channels consumer
我有一个 Django 渠道消费者与客户沟通。我从外部 API 得到了一个视图,希望从客户那里得到一些东西。从这个角度来看,我想告诉那个消费者通过他的套接字向客户端请求一个请求。
我目前正在探索 django rest 框架,但我现在找不到直接向该消费者询问任何内容的方法。
好吧,我有一个想法,但它涉及创建另一个套接字并通过通道的通道进行通信。但我希望我能摆脱这种过载。
从您在评论中的回复来看,您似乎想通过消费者从您的 DRF 视图向客户端发送消息。您可以查看 的答案。
首先,您需要在消费者中有一个方法将消息发送回客户端:
...
async def send_alert(self, event):
# Send message to WebSocket
await self.send(text_data={
'type': 'alert',
'details': 'An external API api.external.com needs some data from you'
})
...
现在您可以向此方法发送消息了。假设客户端连接到channel1
,你可以在你的视图中这样做:
from channels.layers import get_channel_layer
from asgiref.sync import async_to_sync
...
channel_layer = get_channel_layer()
async_to_sync(channel_layer.send)("channel1", {
"type": "send.alert"
})
...
我有一个 Django 渠道消费者与客户沟通。我从外部 API 得到了一个视图,希望从客户那里得到一些东西。从这个角度来看,我想告诉那个消费者通过他的套接字向客户端请求一个请求。
我目前正在探索 django rest 框架,但我现在找不到直接向该消费者询问任何内容的方法。 好吧,我有一个想法,但它涉及创建另一个套接字并通过通道的通道进行通信。但我希望我能摆脱这种过载。
从您在评论中的回复来看,您似乎想通过消费者从您的 DRF 视图向客户端发送消息。您可以查看
首先,您需要在消费者中有一个方法将消息发送回客户端:
...
async def send_alert(self, event):
# Send message to WebSocket
await self.send(text_data={
'type': 'alert',
'details': 'An external API api.external.com needs some data from you'
})
...
现在您可以向此方法发送消息了。假设客户端连接到channel1
,你可以在你的视图中这样做:
from channels.layers import get_channel_layer
from asgiref.sync import async_to_sync
...
channel_layer = get_channel_layer()
async_to_sync(channel_layer.send)("channel1", {
"type": "send.alert"
})
...