我正在使用Nginx
+ uWSGI
来部署我的Django
应用。现在,我需要使用WebSocket
来向所有连接的客户端发送消息。因此,我使用Nginx
+ Daphne
来部署使用WebSocket
的{{1}}服务器。
问题是我不知道如何如何触发Django Channels
中的WebSocket server
来向所有客户端广播内容。
我搜索了HTTP server
,只是发现了一个类似的问题Node js, Call WebSocket server from http server。但是该解决方案特定于stackoverflow
。
所以我的问题是:
NodeJS
服务器调用WebSocket
服务器的功能吗?HTTP
服务器中编写所有逻辑? 请帮助我。谢谢。
答案 0 :(得分:0)
要进行广播,您需要进行分组。 See here。
HTTP服务器由同步代码组成。因此,您将需要与此类似的代码,该代码可以使用async_to_sync
以同步方式将消息发送到组:
from asgiref.sync import async_to_sync
from channels.layers import get_channel_layer
channel_layer = get_channel_layer()
def send_to_group_sync(group_name, data):
async_to_sync(channel_layer.group_send)(group_name, data)
您可以像这样在您的同步代码中触发(例如在您的视图中)
def index(request):
send_to_group_sync('a_group', {
'type': 'method_name',
'message': 'to send',
'another message': 2,
})
return render(request, 'some_folder/index.html')
答案 1 :(得分:0)
我发现Python WebSocket client library可以解决我的问题。我在HTTP server
中使用它来与WebSocket server
连接并进行通信。
虽然我不知道这种方法是普通的还是合理的,但是它可以工作。我暂时不会将这个问题标记为已解决,等待一些更准确的建议。