【问题标题】:Trigger WebSocket server from http server从 http 服务器触发 WebSocket 服务器
【发布时间】:2018-10-10 10:07:17
【问题描述】:

我正在使用Nginx + uWSGI 来部署我的Django 应用程序。现在我需要使用WebSocket 向所有连接的客户端发送消息。所以我使用Nginx + Daphne 来部署使用Django ChannelsWebSocket 服务器。

问题是我不知道如何HTTP server 触发WebSocket server 向所有客户端广播某些内容。

我搜索了stackoverflow,只找到了一个类似的问题Node js, Call WebSocket server from http server。但该解决方案特定于NodeJS

所以我的问题是:

  • 我应该从HTTP服务器调用WebSocket服务器的函数吗?
  • 如果是这样,如何?以及是否有通用的方法来实现通信?
  • 如果不是,我是否应该将所有逻辑都写在WebSocket 服务器中?

请帮助我。谢谢。

【问题讨论】:

    标签: django websocket uwsgi


    【解决方案1】:

    对于广播,您需要创建群组。 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')
    

    【讨论】:

    • 感谢您的回答,也许您误解了我的问题,抱歉我的描述不佳。我在下面发布我的解决方案,你可以看到它。谢谢。
    • @Fogmoon 如果您能够为自己的问题找到答案,那就太好了!您在问题的任何地方都没有提到客户,这让我很困惑,无法写下这个答案。我已经对其进行了相同的编辑。
    【解决方案2】:

    我发现Python WebSocket client library 可以解决我的问题。我在我的HTTP server 中使用它来与WebSocket server 连接和通信。

    虽然我不知道这种方法是否普遍或合理,但它确实有效。我暂时不会将此问题标记为已解决,以等待更准确的建议。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-02-26
      • 1970-01-01
      • 2013-12-25
      • 1970-01-01
      • 1970-01-01
      • 2020-06-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多