soy el autor de bjsonrpc. Estoy seguro de que es posible hacer lo que quieras con él.
Algunas cosas pueden estar mal documentadas o tal vez se necesiten algunos ejemplos.
Pero, en resumen, los controladores pueden almacenar estados internos (como autenticados o no, o tal vez nombre de usuario). Desde cualquier controlador, puede acceder a la clase "Conexión", que tiene el socket en sí.
Parece que quieres algo así como un chat como ejemplo. Hice algo similar en el pasado. Intentaré agregar un ejemplo de chat para una nueva versión.
estados internos se explican aquí: http://packages.python.org/bjsonrpc/tutorial1/index.html#stateful-server
Deben ser utilizados para la autenticación (pero aún no se proporciona ningún método de autenticación estándar).
Sobre cómo llegar a la clase de conexión desde el controlador, eso aún no está documentado (lo siento), pero a veces se usa en los ejemplos dentro del código fuente. Por ejemplo, contiene example1-server.py esta función pública:
def gettotal(self):
self._conn.notify.notify("total")
return self.value_total
BaseHandler._conn representa la conexión de ese usuario. Y es exactamente la misma clase que se obtiene cuando se conecta:
conn = bjsonrpc.connect(host=host,port=port,handler_factory=MyHandler)
Por lo tanto, puede almacenar las conexiones para los usuarios registrados en una variable global, y luego llamar a cualquier método de cliente que desea.
¿Puede hacer que el servidor empuje al cliente? Si es así, ¿hay algún ejemplo en alguna parte? –