# sockjs-tornado **Repository Path**: yohannlee/sockjs-tornado ## Basic Information - **Project Name**: sockjs-tornado - **Description**: WebSocket emulation - Python server - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2020-03-26 - **Last Updated**: 2021-05-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README SockJS-tornado server ===================== SockJS-tornado is a Python server side counterpart of `SockJS-client browser library `_ running on top of `Tornado `_ framework. Simplified echo SockJS server could look more or less like:: from tornado import web, ioloop from sockjs.tornado import SockJSRouter, SockJSConnection class EchoConnection(SockJSConnection): def on_message(self, msg): self.send(msg) if __name__ == '__main__': EchoRouter = SockJSRouter(EchoConnection, '/echo') app = web.Application(EchoRouter.urls) app.listen(9999) ioloop.IOLoop.instance().start() (Take look at `examples `_ for a complete version). Subscribe to `SockJS mailing list `_ for discussions and support. SockJS-tornado API ------------------ SockJS provides slightly different API than ``tornado.websocket``. Main differences are: 1. Depending on transport, actual client connection might or might not be there. So, there is no _self.request_ and other ``tornado.web.RequestHandler`` properties. 2. Changed ``open`` callback name to ``on_open`` to be more consistent with other callbacks. 3. Instead of ``write_message``, all messages are sent using ``send`` method. Just in case, ``send`` in ``tornado.web.RequestHandler`` sends raw data over the connection, without encoding it. 4. There is handy ``broadcast`` function, which accepts list (or iterator) of clients and message to send. Settings -------- You can pass various settings to the ``SockJSRouter``, in a dictionary:: MyRouter = SockJSRouter(MyConnection, '/my', dict(disabled_transports=['websocket'])) Deployment ---------- sockjs-tornado properly works behind haproxy and it is recommended deployment approach. Sample configuration file can be found `here `_. If your log is full of "WARNING: Connection closed by the client", pass ``no_keep_alive`` as ``True`` to ``HTTPServer`` constructor:: HTTPServer(app, no_keep_alive=True).listen(port) or:: app.listen(port, no_keep_alive=True)