Here is a socket.io client library for Python. You can use it to write test code for your socket.io server.
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
Activate isolated environment.
VIRTUAL_ENV=$HOME/.virtualenv source $VIRTUAL_ENV/bin/activate
For debugging information, run these commands first.
import logging logging.basicConfig(level=logging.DEBUG)
Emit.
from socketIO_client import SocketIO
with SocketIO('localhost', 8000) as socketIO:
socketIO.emit('aaa')
socketIO.wait(seconds=1)
Emit with callback.
from socketIO_client import SocketIO
def on_bbb_response(*args):
print 'on_bbb_response', args
with SocketIO('localhost', 8000) as socketIO:
socketIO.emit('bbb', {'xxx': 'yyy'}, on_bbb_response)
socketIO.wait_for_callbacks(seconds=1)
Define events.
from socketIO_client import SocketIO
def on_aaa_response(*args):
print 'on_aaa_response', args
socketIO = SocketIO('localhost', 8000)
socketIO.on('aaa_response', on_aaa_response)
socketIO.emit('aaa')
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('localhost', 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]'
socketIO = SocketIO('localhost', 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('localhost', 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.
from socketIO_client import SocketIO
SocketIO('https://localhost')
Specify params, headers, cookies, proxies thanks to the requests library.
from socketIO_client import SocketIO
from base64 import b64encode
SocketIO('localhost', 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('localhost')
socketIO.wait()
This software is available under the MIT License.
- Guillermo Rauch wrote the socket.io specification.
- Hiroki Ohtani wrote websocket-client.
- rod wrote a prototype for a Python client to a socket.io server on StackOverflow.
- 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 submitted code to expand support of the socket.io protocol.
- Bernard Pratz and Francis Bull wrote prototypes to support xhr-polling and jsonp-polling.
- Eric Chen, Denis Zinevich, Thiago Hersan, Nayef Copty suggested ways to make the connection more robust.