Skip to main content
https://travis-ci.org/invisibleroads/socketIO-client.svg?branch=master

socketIO-client

Here is a socket.io client library for Python. You can use it to write test code for your socket.io server.

This is a forked version to implement the Socket.io 2.x changes. You can find the original here.

Please note that this version implements socket.io protocol 1.x, which is not backwards compatible. If you want to communicate using socket.io protocol 0.9 (which is compatible with gevent-socketio), please use socketIO-client 0.5.7.2.

Installation

Install the package in an isolated environment.

VIRTUAL_ENV=$HOME/.virtualenv

# Prepare isolated environment
virtualenv $VIRTUAL_ENV

# Activate isolated environment
source $VIRTUAL_ENV/bin/activate

# Install package
pip install -U socketIO-client

Usage

Activate isolated environment.

VIRTUAL_ENV=$HOME/.virtualenv
source $VIRTUAL_ENV/bin/activate

Launch your socket.io server.

cd $(python -c "import os, socketIO_client;\
    print(os.path.dirname(socketIO_client.__file__))")

DEBUG=* node tests/serve.js  # Start socket.io server in terminal one
DEBUG=* node tests/proxy.js  # Start proxy server in terminal two
nosetests                    # Run tests in terminal three

For debugging information, run these commands first.

import logging
logging.getLogger('socketIO-client').setLevel(logging.DEBUG)
logging.basicConfig()

Emit.

from socketIO_client import SocketIO, LoggingNamespace

with SocketIO('localhost', 8000, LoggingNamespace) as socketIO:
    socketIO.emit('aaa')
    socketIO.wait(seconds=1)

Emit with callback.

from socketIO_client import SocketIO, LoggingNamespace

def on_bbb_response(*args):
    print('on_bbb_response', args)

with SocketIO('localhost', 8000, LoggingNamespace) as socketIO:
    socketIO.emit('bbb', {'xxx': 'yyy'}, on_bbb_response)
    socketIO.wait_for_callbacks(seconds=1)

Define events.

from socketIO_client import SocketIO, LoggingNamespace

def on_connect():
    print('connect')

def on_disconnect():
    print('disconnect')

def on_reconnect():
    print('reconnect')

def on_aaa_response(*args):
    print('on_aaa_response', args)

socketIO = SocketIO('localhost', 8000, LoggingNamespace)
socketIO.on('connect', on_connect)
socketIO.on('disconnect', on_disconnect)
socketIO.on('reconnect', on_reconnect)

# Listen
socketIO.on('aaa_response', on_aaa_response)
socketIO.emit('aaa')
socketIO.emit('aaa')
socketIO.wait(seconds=1)

# Stop listening
socketIO.off('aaa_response')
socketIO.emit('aaa')
socketIO.wait(seconds=1)

# Listen only once
socketIO.once('aaa_response', on_aaa_response)
socketIO.emit('aaa')  # Activate aaa_response
socketIO.emit('aaa')  # Ignore
socketIO.wait(seconds=1)

Define events in a namespace.

from socketIO_client import SocketIO, BaseNamespace

class Namespace(BaseNamespace):

    def on_aaa_response(self, *args):
        print('on_aaa_response', args)
        self.emit('bbb')

socketIO = SocketIO('localhost', 8000, Namespace)
socketIO.emit('aaa')
socketIO.wait(seconds=1)

Define standard events.

from socketIO_client import SocketIO, BaseNamespace

class Namespace(BaseNamespace):

    def on_connect(self):
        print('[Connected]')

    def on_reconnect(self):
        print('[Reconnected]')

    def on_disconnect(self):
        print('[Disconnected]')

socketIO = SocketIO('localhost', 8000, Namespace)
socketIO.wait(seconds=1)

Define different namespaces on a single socket.

from socketIO_client import SocketIO, BaseNamespace

class ChatNamespace(BaseNamespace):

    def on_aaa_response(self, *args):
        print('on_aaa_response', args)

class NewsNamespace(BaseNamespace):

    def on_aaa_response(self, *args):
        print('on_aaa_response', args)

socketIO = SocketIO('localhost', 8000)
chat_namespace = socketIO.define(ChatNamespace, '/chat')
news_namespace = socketIO.define(NewsNamespace, '/news')

chat_namespace.emit('aaa')
news_namespace.emit('aaa')
socketIO.wait(seconds=1)

Connect via SSL (https://github.com/invisibleroads/socketIO-client/issues/54).

from socketIO_client import SocketIO

# Skip server certificate verification
SocketIO('https://localhost', verify=False)
# Verify the server certificate
SocketIO('https://localhost', verify='server.crt')
# Verify the server certificate and encrypt using client certificate
socketIO = SocketIO('https://localhost', verify='server.crt', cert=(
    'client.crt', 'client.key'))

Specify params, headers, cookies, proxies thanks to the requests library.

from socketIO_client import SocketIO
from base64 import b64encode

SocketIO(
    'localhost', 8000,
    params={'q': 'qqq'},
    headers={'Authorization': 'Basic ' + b64encode('username:password')},
    cookies={'a': 'aaa'},
    proxies={'https': 'https://proxy.example.com:8080'})

Wait forever.

from socketIO_client import SocketIO

socketIO = SocketIO('localhost', 8000)
socketIO.wait()

Don’t wait forever.

from requests.exceptions import ConnectionError
from socketIO_client import SocketIO

try:
    socket = SocketIO('localhost', 8000, wait_for_connection=False)
    socket.wait()
except ConnectionError:
    print('The server is down. Try again later.')

License

This software is available under the MIT License.

Credits

0.7

  • Fixed thread cleanup

  • Fixed disconnect detection if defined directly thanks to Andreas Strikos

  • Fixed support for unicode payloads

0.6

  • Upgraded to socket.io protocol 1.x thanks to Sean Arietta and Joe Palmer

  • Fixed support for Python 3

  • Fixed SSL support

  • Added locks to fix concurrency issues with polling transport

  • Added SocketIO.off() and SocketIO.once()

0.5

  • Added support for Python 3

  • Added support for jsonp-polling thanks to Bernard Pratz

  • Added support for xhr-polling thanks to Francis Bull

  • Added support for query params and cookies

  • Fixed sending acknowledgments in custom namespaces thanks to Travis Odom

  • Rewrote library to use coroutines instead of threads to save memory

0.4

  • Added support for custom headers and proxies thanks to Rui and Sajal

  • Added support for server-side callbacks thanks to Zac Lee

  • Merged Channel functionality into BaseNamespace thanks to Alexandre Bourget

0.3

  • Added support for secure connections

  • Added SocketIO.wait()

  • Improved exception handling in _RhythmicThread and _ListenerThread

0.2

  • Added support for callbacks and channels thanks to Paul Kienzle

  • Incorporated suggestions from Josh VanderLinden and Ian Fitzpatrick

0.1

Release files for socketIO-client-nexus 0.7.6

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for socketIO-client-nexus 0.7.6
File Size Uploaded
socketIO-client-nexus-0.7.6.tar.gz 20.1 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for socketIO-client-nexus 0.7.6
File Interpreter ABI Platform
socketIO_client_nexus-0.7.6-py2.py3-none-any.whl Python 3, Python 2 none any Details

Total release size: 42.6 kB

Release files / socketIO-client-nexus-0.7.6.tar.gz

Download URL socketIO-client-nexus-0.7.6.tar.gz
Size 20.1 kB
Tags Source
SHA-256 checksum
How to use checksums
41e6aaaff981f6729690f472eb2c7a5d1dda07349077e34444527b9700b0aea5
BLAKE2b-256 checksum
How to use checksums
adec5a328019992d77703fd7075e0dec80db01f2a040b831f0a7035ff5ba7fac
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No

Release files / socketIO_client_nexus-0.7.6-py2.py3-none-any.whl

Download URL socketIO_client_nexus-0.7.6-py2.py3-none-any.whl
Size 22.5 kB
Tags Python 2 Python 3
SHA-256 checksum
How to use checksums
9f44d705c38e405fcb334f95c1d5d5878a8daabdfeaca3ba56e974b69f42e643
BLAKE2b-256 checksum
How to use checksums
a0fa2bfd4b5f38530876a26678ed98e3f2233b33479d085cc01adf83af87c3f0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No

Release history Release notifications | RSS feed

This release

0.7.6 This release

2 release files

0.7.5

2 release files

0.7.4

3 release files

0.7.3

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page