Skip to main content

Engine.IO server

Project description

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

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, aiohttp or tornado), 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:

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:

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

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.2.0.tar.gz (22.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

python_engineio-2.2.0-py2.py3-none-any.whl (29.6 kB view details)

Uploaded Python 2Python 3

File details

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

File metadata

File hashes

Hashes for python-engineio-2.2.0.tar.gz
Algorithm Hash digest
SHA256 d35c50db73bf372f82975dc87f18f1cbfab7d5bed2dfc2553ae784579502a461
MD5 cf8868acedc242b30ad3d24060a8d8e1
BLAKE2b-256 0709682c70c33e727aac028fca7216bb0b6efcd276e67118d1df417f778a3af1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for python_engineio-2.2.0-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 abf0d11098643eb1278d2db4dfbd13c0fe3cbfa99315572fd1c223277df62f2e
MD5 e76d7794e7ec2c90b9c69a86c456c3c3
BLAKE2b-256 4a872baf8934cc81afc01b1d86e6f7e4ce4580fe0bcce6e74417b698d6920ced

See more details on using hashes here.

Supported by

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