Реакция нативного соединения Websocket с каналами Django открыта, но сообщения не проходят - PullRequest
5 голосов
/ 31 мая 2019

У меня есть собственное приложение (Android) для связи с каналами Django.При подключении к моему серверу разработки через ws все работает нормально.Однако, когда я пытаюсь подключиться к моему удаленному wss серверу с тем же кодом, ничего не получается.

Соединение с сокетом отображается как OPEN.Я даже получаю это первое "connected" сообщение, отправленное с сервера в мое приложение:

class RGConsumer(AsyncWebsocketConsumer):
    rooms = []

    async def connect(self):
        self.rooms = []
        await self.join_room('all')
        await self.accept()
        await self.send(text_data=json.dumps({'event': 'connected'}))

    async def join_room(self, room_name):
        if room_name not in self.rooms:
            self.rooms.append(room_name)
            await self.channel_layer.group_add(
                room_name,
                self.channel_name
            )

Проблема в том, что кроме этого первого сообщения, ничего не проходит.Например, все, что я посылаю через эту функцию, никогда не получает приложение:

def send_to_all(event, data=None):
    message = {'type': 'channel_event', 'message': {'event': event, 'data': data}}
    channel_layer = get_channel_layer()
    async_to_sync(channel_layer.group_send)(
        'all',
        message
    )

Таким же образом, когда я вызываю websocket.send в моем приложении, функция receive моего потребителя не срабатываетвообще.

Еще раз, это прекрасно работает на моем локальном сервере, поэтому я предполагаю, что код правильный.Только при подключении приложения к производственному wss серверу оно перестает работать (кроме первого полученного connected сообщения)

Более того, даже функция websocket.onclose не вызывается, если ярешите перезапустить мой рабочий сервер.

Существуют ли какие-либо дополнительные настройки, позволяющие правильно подключиться к серверу wss, который я мог бы пропустить?Я не уверен, что еще может понадобиться.

1 Ответ

3 голосов
/ 04 июня 2019

Мне удалось решить эту проблему путем создания другого канала каналов для мобильного подключения WebSocket.

(/ws/ для моего сайта и /mobile-ws/ для приложения)

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

...