Запустить сервер WebSocket с http-сервера - PullRequest
0 голосов
/ 08 октября 2018

Я использую Nginx + uWSGI для развертывания моего Django приложения.Теперь мне нужно использовать WebSocket, чтобы отправить сообщение всем подключенным клиентам.Поэтому я использую Nginx + Daphne для развертывания WebSocket сервера, который использует Django Channels.

Проблема в том, что я не знаю , как вызвать WebSocket server из HTTP server для передачи чего-либо всем клиентам.

Я искал stackoverflow иПросто найдите один подобный вопрос Node js, Вызовите сервер WebSocket с http-сервера .Но решение относится только к NodeJS.

Итак, мой вопрос:

  • Должен ли я вызывать функцию WebSocket сервера с HTTP Сервера?
  • Если так, как?И есть ли общий метод для осуществления связи?
  • Если нет, Должен ли я просто написать всю логику в WebSocket Сервер?

Пожалуйста, помогите мне.Спасибо.

Ответы [ 2 ]

0 голосов
/ 09 октября 2018

Я считаю, что клиентская библиотека Python WebSocket может решить мою проблему.Я использую его в своем HTTP server для подключения и связи с WebSocket server.

Хотя я не знаю, является ли этот метод распространенным или разумным, но он работает.Я не буду отмечать эту проблему как решенную некоторое время, чтобы дождаться более точного предложения.

0 голосов
/ 09 октября 2018

Для трансляции вам нужно составить группы. См. Здесь .

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')
...