Python Socket.IO клиент для отправки широковещательных сообщений на сервер TornadIO2

Я создаю веб-приложение в реальном времени.I want to be able to send broadcast messages from the server-side implementation of my python application.

Вот установка:

socketio.js on the client-side TornadIO2 server as Socket.IO server python on the server-side (Django framework)

Я могу успешно отправлять сообщения socket.io от клиента на сервер. Сервер обрабатывает их и может отправить ответ. Далее я опишу, как я это сделал.

Current Setup and Code

Во-первых, нам нужно определить соединение, которое обрабатывает события socket.io:

class BaseConnection(tornadio2.SocketConnection):
    def on_message(self, message):
        pass

    # will be run if client uses socket.emit('connect', username)
    @event
    def connect(self, username):
        # send answer to client which will be handled by socket.on('log', function)
        self.emit('log', 'hello ' + username)

Запуск сервера осуществляется с помощью пользовательского метода управления Django:

class Command(BaseCommand):
    args = ''
    help = 'Starts the TornadIO2 server for handling socket.io connections'

    def handle(self, *args, **kwargs):
        autoreload.main(self.run, args, kwargs)

    def run(self, *args, **kwargs):
        port = settings.SOCKETIO_PORT

        router = tornadio2.TornadioRouter(BaseConnection)

        application = tornado.web.Application(
            router.urls,
            socket_io_port = port
        )

        print 'Starting socket.io server on port %s' % port
        server = SocketServer(application)

Очень хорошо, сервер работает сейчас. Давайте добавим код клиента:

<script type="text/javascript">    
    var sio = io.connect('localhost:9000');

    sio.on('connect', function(data) {
        console.log('connected');
        sio.emit('connect', '{{ user.username }}');
    });

    sio.on('log', function(data) {
        console.log("log: " + data);
    });
</script>

Очевидно, что{{ user.username }} будет заменено именем пользователя, вошедшего в систему в данный момент, в этом примере это имя пользователя & quot; alp & quot ;.

Теперь каждый раз, когда страница обновляется, вывод консоли:

connected
log: hello alp

Поэтому вызов сообщений и отправка ответов работает.But now comes the tricky part.

Problems

Ответ "Привет, Alp" отправляется только инициатору сообщения socket.io. Я хочу передать сообщение всем подключенным клиентам, чтобы они могли получать информацию в режиме реального времени, если к участнику присоединяется новый пользователь (например, в приложении чата).

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

How can i send a broadcast message to all connected clients?

How can i send a broadcast message to multiple connected clients that are subscribed on a specific channel?

How can i send a broadcast message anywhere in my python code (outside of the BaseConnection class)? Would this require some sort of Socket.IO client for python or is this builtin with TornadIO2?

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

Ответы на вопрос(3)

Ваш ответ на вопрос