从http服务器触发WebSocket服务器

时间:2018-10-08 14:31:30

标签: django websocket uwsgi

我正在使用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服务器中编写所有逻辑?

请帮助我。谢谢。

2 个答案:

答案 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连接并进行通信。

虽然我不知道这种方法是普通的还是合理的,但是它可以工作。我暂时不会将这个问题标记为已解决,等待一些更准确的建议。