Выдавайте живые обновления содержимого HTML с помощью каналов - PullRequest
0 голосов
/ 02 ноября 2019

Я пытаюсь изменить содержимое HTML на странице для всех подключенных пользователей. В настоящее время при отправке сообщения с использованием потребителя оно отправляет его только экземпляру, который инициировал первоначальное сообщение, требующее обновления (т. Е. Если пользователь нажимает кнопку, которая изменяет содержимое HTML, отправляя событие WebSocket, то только содержимое его экземплярастраница изменена). Вот мой текущий потребитель:

class ScoreConsumer(AsyncConsumer):
    async def websocket_connect(self, event):
        print("connected ", event)
        await self.send({
            'type': 'websocket.accept'
        })

    async def websocket_receive(self, event):
        print("receive ", event)
        data = event.get('text', None)
        print(data)
        if data:
            loaded_data = json.loads(data)
            await self.send({
                'type': 'websocket.send',
                'text': loaded_data['message']
            })

    async def websocket_disconnect(self, event):
        print("disconnected ", event)

, а вот JavaScript (с пропущенными ненужными частями), который инициирует и обрабатывает сообщения

var loc = window.location;

        var wsStart = 'ws://'
        if (loc.protocol == 'https:'){
            wsStart = 'wss://';
        }

        var endpoint = wsStart + window.location.host + loc.pathname;
        var socket = new WebSocket(endpoint);
        console.log(endpoint);

        socket.onmessage = function(e){
            console.log("Got websocket message " + e.data);
            var data = e.data;
            console.log(data);
            if (data == 'connected') {
                document.querySelector('#bluescore').innerHTML = "User Connected";
            } else {
                document.querySelector('#redscore').innerHTML = data;
            }
        }

        document.querySelector('#test-button').onclick = function(e) {
            var message = "Yee";
            console.log("Help");
            socket.send(JSON.stringify({
                'message': message
            }))
        }

Ни один экземпляр в настоящее время не получает сообщений, отправленныхдругой.

...