Skip to content

Repository files navigation

Fork of socketIO-client that has binary support and socketio 2 support, for use with the sstk codebase.

socketIO-client-sstk

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.

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-sstk

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_sstk;\
print(os.path.dirname(socketIO_client_sstk.__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-sstk').setLevel(logging.DEBUG)
logging.basicConfig()

Emit.

from socketIO_client_sstk 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_sstk 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_sstk 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_sstk 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_sstk 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_sstk 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 (invisibleroads#54).

from socketIO_client_sstk 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_sstk 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_sstk import SocketIO
socketIO = SocketIO('127.0.0.1', 8000)
socketIO.wait()

Don't wait forever.

from requests.exceptions import ConnectionError
from socketIO_client_sstk 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

About

A socket.io client library for Python

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages