У меня есть собственное приложение (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, которые я мог упустить?
Дайте мне знать, если нужен еще код. Я не уверен, что еще может быть необходимо.
async def channel_event(self, data)
. Я подозреваю, что код в порядке, потому что он работает без каких-либо проблем локально. - person Ryan Pergent   schedule 03.06.2019