# socketIO-client **Repository Path**: mirrors_addons/socketIO-client ## Basic Information - **Project Name**: socketIO-client - **Description**: A socket.io client library for Python - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2020-08-27 - **Last Updated**: 2025-09-06 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README .. 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!