Skip to main content
Help us improve PyPI by participating in user testing. All experience levels needed!

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.python.org/pypi/python-engineio

Project details


Release history Release notifications

History Node

2.1.1

History Node

2.1.0

This version
History Node

2.0.4

History Node

2.0.3

History Node

2.0.2

History Node

2.0.1

History Node

2.0.0

History Node

1.7.0

History Node

1.6.1

History Node

1.6.0

History Node

1.5.4

History Node

1.5.3

History Node

1.5.2

History Node

1.5.1

History Node

1.5.0

History Node

1.4.0

History Node

1.3.2

History Node

1.3.1

History Node

1.3.0

History Node

1.2.4

History Node

1.2.3

History Node

1.2.2

History Node

1.2.1

History Node

1.2.0

History Node

1.1.2

History Node

1.1.1

History Node

1.1.0

History Node

1.0.4

History Node

1.0.3

History Node

1.0.2

History Node

1.0.1

History Node

1.0.0

History Node

0.9.2

History Node

0.9.1

History Node

0.9.0

History Node

0.8.8

History Node

0.8.7

History Node

0.8.6

History Node

0.8.5

History Node

0.8.4

History Node

0.8.3

History Node

0.8.2

History Node

0.8.1

History Node

0.8.0

History Node

0.7.2

History Node

0.7.1

History Node

0.7.0

History Node

0.6.9

History Node

0.6.8

History Node

0.6.7

History Node

0.6.6

History Node

0.6.5

History Node

0.6.4

History Node

0.6.3

History Node

0.6.2

History Node

0.6.1

History Node

0.6.0

History Node

0.5.1

History Node

0.5.0

History Node

0.4.0

History Node

0.3.1

History Node

0.3.0

History Node

0.2.0

History Node

0.1.0

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Filename, size & hash SHA256 hash help File type Python version Upload date
python_engineio-2.0.4-py2.py3-none-any.whl (30.0 kB) Copy SHA256 hash SHA256 Wheel 3.6 Mar 13, 2018
python-engineio-2.0.4.tar.gz (23.8 kB) Copy SHA256 hash SHA256 Source None Mar 13, 2018

Supported by

Elastic Elastic Search Pingdom Pingdom Monitoring Google Google BigQuery Sentry Sentry Error logging CloudAMQP CloudAMQP RabbitMQ AWS AWS Cloud computing Fastly Fastly CDN DigiCert DigiCert EV certificate StatusPage StatusPage Status page