Cliente Python Socket.IO para enviar mensajes de difusión al servidor TornadIO2

Estoy construyendo una aplicación web en tiempo real.Quiero poder enviar mensajes de difusión desde la implementación del lado del servidor de mi aplicación python.

Aquí está la configuración:

socketio.js en el lado del clienteTornadIO2 servidor como servidor Socket.IOpitón en el lado del servidor (Django marco de referencia)

Puedo enviar con éxito mensajes de socket.io del cliente al servidor. El servidor maneja estos y puede enviar una respuesta. A continuación describiré cómo hice eso.

Configuración actual y código

Primero, debemos definir una conexión que maneje los eventos 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)

El inicio del servidor se realiza mediante un método personalizado de administración de 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)

Muy bien, el servidor se ejecuta ahora. Añadamos el código de cliente:

<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>

Obviamente,{{ user.username }} será reemplazado por el nombre de usuario del usuario que ha iniciado sesión actualmente, en este ejemplo el nombre de usuario es "alp".

Ahora, cada vez que la página se actualiza, la salida de la consola es:

connected
log: hello alp

Por lo tanto, invocar mensajes y enviar respuestas funciona.Pero ahora viene la parte difícil.

Problemas

La respuesta "hello alp" se envía solo al invocador del mensaje socket.io. Quiero transmitir un mensaje a todos los clientes conectados, para que puedan informarse en tiempo real si un nuevo usuario se une al participante (por ejemplo, en una aplicación de chat).

Asi que aqui están mis preguntas:

¿Cómo puedo enviar un mensaje de difusión a todos los clientes conectados?

¿Cómo puedo enviar un mensaje de difusión a varios clientes conectados que están suscritos en un canal específico?

¿Cómo puedo enviar un mensaje de difusión a cualquier lugar en mi código de Python (fuera de laBaseConnection clase)? ¿Esto requeriría algún tipo de cliente Socket.IO para python o está integrado en TornadIO2?

Todas estas transmisiones deben realizarse de manera confiable, por lo que supongo que los websockets son la mejor opción. Pero estoy abierto a todas las buenas soluciones.

Respuestas a la pregunta(2)

Su respuesta a la pregunta