SockJS python server implementation on top of Tornado framework
Project description
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:
- Depending on transport, actual client connection might or might not be there. So, there is no _self.request_ and other tornado.web.RequestHandler properties.
- Changed open callback name to on_open to be more consistent with other callbacks.
- 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.
- 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)
Changelog
1.0.1
- Tornado 4.x compatibility fix
1.0.0
- Major version bump. sockjs-tornado can be considered mature
- Python 3 support
- Tornado 3.0 support on both Python 2 and Python 3
- Bug fixes
0.0.5
- iOS 6 support
- SockJS 0.3.3 client support
- Some headers and request URI path is now passed to on_open handler
- Added binary transport support for raw websocket transport
- Minor multiplex sample fixes
0.0.4
- Added support for older simplejson library versions
- Fixed installation script
0.0.3
- SockJS 0.3 support
- Connection multiplexing sample
- IP validation is now optional
0.0.2
- SockJS 0.2 support and compatibility fixes
0.0.1
Initial release.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Filename, size | File type | Python version | Upload date | Hashes |
---|---|---|---|---|
Filename, size sockjs_tornado_meiqia-2016.12.30-py2-none-any.whl (34.3 kB) | File type Wheel | Python version 2.7 | Upload date | Hashes View |
Filename, size sockjs-tornado-meiqia-2016.12.30.tar.gz (21.7 kB) | File type Source | Python version None | Upload date | Hashes View |
Hashes for sockjs_tornado_meiqia-2016.12.30-py2-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | d324c5711a16e1286848fd64210d371fa7c34191a2e582ab4cd67512764a4bec |
|
MD5 | 05cf4ad2ab9ed4ea7f086d2dc9906ff8 |
|
BLAKE2-256 | 4e89c3ad2715403c1b8f9439dba18048d2cafdb304de2bbcb54b8c0c4f9e56d0 |
Hashes for sockjs-tornado-meiqia-2016.12.30.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | 1a682107da44de4d3dc50a0866a519104a60b37cd6fbec2bd8f7ab07b0de7f47 |
|
MD5 | 4cbc601ac3de0bdaf1164851800103d4 |
|
BLAKE2-256 | ae40eabaf8994e4b4853eaff96c0201c86d7537575204ce4a33d83876d6d8116 |