Skip to main content

Engine.IO server

Project description

python-engineio
===============

.. image:: https://travis-ci.org/miguelgrinberg/python-engineio.svg?branch=master
:target: https://travis-ci.org/miguelgrinberg/python-engineio

Python implementation of the `Engine.IO`_ realtime server.

Features
--------

- Fully compatible with the Javascript `engine.io-client`_ library, versions 1.5.0 and up.
- Compatible with Python 2.7 and Python 3.3+.
- Supports large number of clients even on modest hardware when used with an asynchronous server based on `asyncio`_(`sanic`_ or `aiohttp`_), `eventlet`_ or `gevent`_. For development and testing, any WSGI compliant multi-threaded server can be used.
- Includes a WSGI middleware that integrates Engine.IO traffic with standard WSGI applications.
- Uses an event-based architecture implemented with decorators that hides the details of the protocol.
- Implements HTTP long-polling and WebSocket transports.
- Supports XHR2 and XHR browsers as clients.
- Supports text and binary messages.
- Supports gzip and deflate HTTP compression.
- Configurable CORS responses to avoid cross-origin problems with browsers.

Examples
--------

The following application uses the Eventlet asynchronous server, and includes a
small Flask application that serves the HTML/Javascript to the client:


.. code:: python

import engineio
import eventlet
import eventlet.wsgi
from flask import Flask, render_template

eio = engineio.Server()
app = Flask(__name__)

@app.route('/')
def index():
"""Serve the client-side application."""
return render_template('index.html')

@eio.on('connect')
def connect(sid, environ):
print("connect ", sid)

@eio.on('message')
def message(sid, data):
print("message ", data)
eio.send(sid, 'reply')

@eio.on('disconnect')
def disconnect(sid):
print('disconnect ', sid)

if __name__ == '__main__':
# wrap Flask application with engineio's middleware
app = engineio.Middleware(eio, app)

# deploy as an eventlet WSGI server
eventlet.wsgi.server(eventlet.listen(('', 8000)), app)


And below is a similar example, coded for asyncio (Python 3.5+ only) with the
`aiohttp`_ framework:


.. code:: python

from aiohttp import web
import engineio

eio = engineio.AsyncServer()
app = web.Application()
eio.attach(app)

async def index(request):
"""Serve the client-side application."""
with open('index.html') as f:
return web.Response(text=f.read(), content_type='text/html')

@eio.on('connect')
def connect(sid, environ):
print("connect ", sid)

@eio.on('message')
async def message(sid, data):
print("message ", data)
await eio.send(sid, 'reply')

@eio.on('disconnect')
def disconnect(sid):
print('disconnect ', sid)

app.router.add_static('/static', 'static')
app.router.add_get('/', index)

if __name__ == '__main__':
web.run_app(app)

Resources
---------

- `Documentation`_
- `PyPI`_

.. _Engine.IO: https://github.com/Automattic/engine.io
.. _engine.io-client: https://github.com/Automattic/engine.io-client
.. _asyncio: https://docs.python.org/3/library/asyncio.html
.. _sanic: http://sanic.readthedocs.io/
.. _aiohttp: http://aiohttp.readthedocs.io/
.. _eventlet: http://eventlet.net/
.. _gevent: http://gevent.org/
.. _aiohttp: http://aiohttp.readthedocs.io/
.. _Documentation: http://pythonhosted.org/python-engineio
.. _PyPI: https://pypi-hypernode.com/pypi/python-engineio

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.

Source Distribution

python-engineio-2.1.0.tar.gz (23.8 kB view details)

Uploaded Source

Built Distribution

python_engineio-2.1.0-py2.py3-none-any.whl (30.0 kB view details)

Uploaded Python 2 Python 3

File details

Details for the file python-engineio-2.1.0.tar.gz.

File metadata

File hashes

Hashes for python-engineio-2.1.0.tar.gz
Algorithm Hash digest
SHA256 8a4ebbe53af5123a7057f29677dbe78a8515d3b7e5e124431d0542886d54d013
MD5 110f3df0567c410937015db701ccaa1b
BLAKE2b-256 1690c0a8945e95f1f5a1364c5d528e1f701984643258e2e9ec39efe4aa5466d2

See more details on using hashes here.

Provenance

File details

Details for the file python_engineio-2.1.0-py2.py3-none-any.whl.

File metadata

File hashes

Hashes for python_engineio-2.1.0-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 cf73086278158307535ad94fd2f9c53becf57790c699938006b2dc2be72ec44a
MD5 afae0bedb56c5499267f88b1d6e04079
BLAKE2b-256 ab87a43279428b8ac8ebd0f7d4959c675ec48c9aed5f6a90e5befbc7c8252b6a

See more details on using hashes here.

Provenance

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page