Skip to main content

Socket.IO server

Project description

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

Python implementation of the Socket.IO realtime server.

Features

  • Fully compatible with the Javascript, Swift, C++ and Java official Socket.IO clients, plus any third party clients that comply with the Socket.IO specification.

  • 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 also be used.

  • Includes a WSGI middleware that integrates Socket.IO traffic with standard WSGI applications.

  • Broadcasting of messages to all connected clients, or to subsets of them assigned to “rooms”.

  • Optional support for multiple servers, connected through a messaging queue such as Redis or RabbitMQ.

  • Send messages to clients from external processes, such as Celery workers or auxiliary scripts.

  • Event-based architecture implemented with decorators that hides the details of the protocol.

  • Support for HTTP long-polling and WebSocket transports.

  • Support for XHR2 and XHR browsers.

  • Support for text and binary messages.

  • Support for gzip and deflate HTTP compression.

  • Configurable CORS responses, to avoid cross-origin problems with browsers.

Example

The following example application uses the aiohttp framework for asyncio:

from aiohttp import web
import socketio

sio = socketio.AsyncServer()
app = web.Application()
sio.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')

@sio.on('connect', namespace='/chat')
def connect(sid, environ):
    print("connect ", sid)

@sio.on('chat message', namespace='/chat')
async def message(sid, data):
    print("message ", data)
    await sio.emit('reply', room=sid)

@sio.on('disconnect', namespace='/chat')
def disconnect(sid):
    print('disconnect ', sid)

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

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

And below is a similar example, using Flask to serve the client application. This example is compatible with Python 2.7 and Python 3.3+:

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

sio = socketio.Server()
app = Flask(__name__)

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

@sio.on('connect', namespace='/chat')
def connect(sid, environ):
    print("connect ", sid)

@sio.on('chat message', namespace='/chat')
def message(sid, data):
    print("message ", data)
    sio.emit('reply', room=sid)

@sio.on('disconnect', namespace='/chat')
def disconnect(sid):
    print('disconnect ', sid)

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

    # deploy as an eventlet WSGI server
    eventlet.wsgi.server(eventlet.listen(('', 8000)), 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-socketio-2.1.0.tar.gz (25.9 kB view details)

Uploaded Source

Built Distribution

python_socketio-2.1.0-py2.py3-none-any.whl (33.3 kB view details)

Uploaded Python 2 Python 3

File details

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

File metadata

  • Download URL: python-socketio-2.1.0.tar.gz
  • Upload date:
  • Size: 25.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.20.1 setuptools/39.0.1 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.6.6

File hashes

Hashes for python-socketio-2.1.0.tar.gz
Algorithm Hash digest
SHA256 674dab5d0899e50f69b5e122e5ffb54b3baa6e92205b5fa1f6d184b8a13a8580
MD5 c1878cdeb2c9a25ad322c665953bfd96
BLAKE2b-256 fed432586eaf4747fcf8b66135eab6133273fcf03daae0cd5c9b676632b1c98c

See more details on using hashes here.

File details

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

File metadata

  • Download URL: python_socketio-2.1.0-py2.py3-none-any.whl
  • Upload date:
  • Size: 33.3 kB
  • Tags: Python 2, Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.20.1 setuptools/39.0.1 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.6.6

File hashes

Hashes for python_socketio-2.1.0-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 82491a51c508f1165dc7b31749d6b24aca96c8ff2f609d20cba77701e260db68
MD5 9d19a373c5b5bbafb325536d7986c2f1
BLAKE2b-256 9d9ed3bed5e0c5314a8fb6103194033d77a875f25b2970eb1efc575fd4fde12f

See more details on using hashes here.

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