Need help with socketIO-client?
Click the “chat” button below for chat support from the developer who created it, or find similar developers for support.

About the developer

invisibleroads
436 Stars 212 Forks MIT License 358 Commits 77 Opened issues

Description

A socket.io client library for Python

Services available

!
?

Need anything else?

Contributors list

No Data

.. image:: https://travis-ci.org/invisibleroads/socketIO-client.svg?branch=master :target: https://travis-ci.org/invisibleroads/socketIO-client

socketIO-client

Here is a

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

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('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

  • Guillermo Rauch 
    _ wrote the
    socket.io specification 
    _.
  • Hiroki Ohtani 
    _ wrote
    websocket-client 
    _.
  • Roderick Hodgson 
    _ wrote a
    prototype for a Python client to a socket.io server 
    _.
  • Alexandre Bourget 
    _ wrote
    gevent-socketio 
    _, which is a socket.io server written in Python.
  • Paul Kienzle 
    ,
    Zac Lee 
    ,
    Josh VanderLinden 
    ,
    Ian Fitzpatrick 
    ,
    Lucas Klein 
    ,
    Rui Chicoria 
    ,
    Travis Odom 
    ,
    Patrick Huber 
    ,
    Brad Campbell 
    ,
    Daniel 
    ,
    Sean Arietta 
    ,
    Sacha Stafyniak 
    submitted code to expand support of the socket.io protocol.
  • Bernard Pratz 
    ,
    Francis Bull 
    wrote prototypes to support xhr-polling and jsonp-polling.
  • Joe Palmer 
    _ sponsored development.
  • Eric Chen 
    ,
    Denis Zinevich 
    ,
    Thiago Hersan 
    ,
    Nayef Copty 
    ,
    Jörgen Karlsson 
    ,
    Branden Ghena 
    ,
    Tim Landscheidt 
    ,
    Matt Porritt 
    ,
    Matt Dainty 
    ,
    Thomaz de Oliveira dos Reis 
    ,
    Felix König 
    ,
    George Wilson 
    ,
    Andreas Strikos 
    ,
    Alessio Sergi 
    Claudio Yacarini 
    ,
    Khairi Hafsham 
    ,
    Robbie Clarken 
    _ suggested ways to make the connection more robust.
  • Merlijn van Deen 
    ,
    Frederic Sureau 
    ,
    Marcus Cobden 
    ,
    Drew Hutchison 
    ,
    wuurrd 
    ,
    Adam Kecer 
    ,
    Alex Monk 
    ,
    Vishal P R 
    ,
    John Vandenberg 
    ,
    Thomas Grainger 
    ,
    Daniel Quinn 
    ,
    Adric Worley 
    ,
    Adam Roses Wight 
    ,
    Jan Včelák 
    proposed changes that make the library more friendly and practical for you!

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.