Skip to main content

A socket.io client library

Project description

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 of socketIO_client. You can find the original here.

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('127.0.0.1', 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('127.0.0.1', 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('127.0.0.1', 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('127.0.0.1', 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('127.0.0.1', 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('127.0.0.1', 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://127.0.0.1', verify=False)
# Verify the server certificate
SocketIO('https://127.0.0.1', verify='server.crt')
# Verify the server certificate and encrypt using client certificate
socketIO = SocketIO('https://127.0.0.1', 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(
    '127.0.0.1', 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('127.0.0.1', 8000)
socketIO.wait()

Don’t wait forever.

from requests.exceptions import ConnectionError
from socketIO_client import SocketIO

try:
    socket = SocketIO('127.0.0.1', 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

Project details


Download files

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

Source Distribution

socketIO-client-MV-0.7.2.tar.gz (20.4 kB view details)

Uploaded Source

Built Distribution

socketIO_client_MV-0.7.2-py3-none-any.whl (23.8 kB view details)

Uploaded Python 3

File details

Details for the file socketIO-client-MV-0.7.2.tar.gz.

File metadata

  • Download URL: socketIO-client-MV-0.7.2.tar.gz
  • Upload date:
  • Size: 20.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.0.1 requests-toolbelt/0.9.1 tqdm/4.32.1 CPython/3.5.2

File hashes

Hashes for socketIO-client-MV-0.7.2.tar.gz
Algorithm Hash digest
SHA256 db5d186d3614d3e5d58c45cfbf1935c108276248572144f69ff45cc309e4c96b
MD5 1eee27f00a61f33c761f48de46626b71
BLAKE2b-256 acaa5c465a8ac7ed8ac90d8e4755129b87a05161e8c8c4bf884eba543f1c6f28

See more details on using hashes here.

File details

Details for the file socketIO_client_MV-0.7.2-py3-none-any.whl.

File metadata

  • Download URL: socketIO_client_MV-0.7.2-py3-none-any.whl
  • Upload date:
  • Size: 23.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.0.1 requests-toolbelt/0.9.1 tqdm/4.32.1 CPython/3.5.2

File hashes

Hashes for socketIO_client_MV-0.7.2-py3-none-any.whl
Algorithm Hash digest
SHA256 65620b32e5d6a1fe27a658769a62d0d7a7d35df4c3cedd633e544369208f96b1
MD5 f7a1602521049e5872c8fc2ad86edf6c
BLAKE2b-256 b85d0d5d21029e6fac67f32e8211a7ee755479160de1634fbce0ff746deb0753

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