Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/invisibleroads/socketIO-client
A socket.io client library for Python
https://github.com/invisibleroads/socketIO-client
Last synced: 29 days ago
JSON representation
A socket.io client library for Python
- Host: GitHub
- URL: https://github.com/invisibleroads/socketIO-client
- Owner: invisibleroads
- License: mit
- Created: 2012-04-14T15:24:44.000Z (over 12 years ago)
- Default Branch: master
- Last Pushed: 2020-11-14T15:02:52.000Z (about 4 years ago)
- Last Synced: 2024-11-06T02:53:05.607Z (about 1 month ago)
- Language: Python
- Homepage: http://pypi.python.org/pypi/socketIO-client
- Size: 369 KB
- Stars: 447
- Watchers: 27
- Forks: 205
- Open Issues: 78
-
Metadata Files:
- Readme: README.rst
- Changelog: CHANGES.rst
- License: LICENSE
Awesome Lists containing this project
README
.. image:: https://travis-ci.org/invisibleroads/socketIO-client.svg?branch=master
:target: https://travis-ci.org/invisibleroads/socketIO-clientsocketIO-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-clientUsage
-----
Activate isolated environment. ::VIRTUAL_ENV=$HOME/.virtualenv
source $VIRTUAL_ENV/bin/activateLaunch 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 threeFor 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 b64encodeSocketIO(
'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 SocketIOtry:
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!