A socket.io client library
Project description
socketIO-client-2
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.6.
Installation
Install the package in an isolated environment.
mkvirtualenv your_env_name pip install socketIO-client-2
Usage
Activate isolated environment.
workon your_env_name
Launch your socket.io server or this provided test server.
# Get package folder PACKAGE_FOLDER=`python -c "import os, socketIO_client;\ print(os.path.dirname(socketIO_client.__file__))"` # Install the server dependencies cd $PACKAGE_FOLDER/tests/ npm install # Start socket.io server DEBUG=* node $PACKAGE_FOLDER/tests/serve.js # Start proxy server in a separate terminal on the same machine DEBUG=* node $PACKAGE_FOLDER/tests/proxy.js # To run the tests in a third terminal cd $PACKAGE_FOLDER nosetests --with-coverage --cover-package=socketIO_client tests/
For debugging information, run these commands first.
import logging logging.getLogger('requests').setLevel(logging.WARNING) logging.basicConfig(level=logging.DEBUG)
Emit.
from socketIO_client import SocketIO, LoggingNamespace with SocketIO('localhost', 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('localhost', 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_aaa_response(*args): print('on_aaa_response', args) socketIO = SocketIO('localhost', 8000, LoggingNamespace) 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', verify=False)
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', 8000) socketIO.wait()
Contributing
I am following the git-flow <http://nvie.com/posts/a-successful-git-branching-model/> model put forward by Vincent Driessen. Therefore I ask that you make pull requests to the develop branch. Also, I am supporting Python 2.6, 2.7, and 3.4 so please make sure that your changes are compatible with all three versions. Travis-CI is setup to automatically run the tests with all three Python versions on pull-requests so if you add tests to cover any changes you made then you should be able to see if they are compatible.
License
This software is available under the MIT License.
Credits
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.
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 submitted code to expand support of the socket.io protocol.
Bernard Pratz, Francis Bull wrote prototypes to support xhr-polling and jsonp-polling.
Eric Chen, Denis Zinevich, Thiago Hersan, Nayef Copty, Jörgen Karlsson, Branden Ghena, Tim Landscheidt, Matt Porritt 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 proposed changes that make the library more friendly and practical for you!
0.7.2
NamespaceLogging fix
0.7.1
Updated instructions
0.7.0
Forked package
Added binary support
0.6.5
Updated wait loop to be more responsive under websocket transport
0.6.4
Fixed support for Python 3
Fixed thread cleanup
0.6.3
Upgraded to socket.io protocol 1.x for websocket transport
Added locks to fix concurrency issues with polling transport
Fixed SSL support
0.6.1
Upgraded to socket.io protocol 1.x thanks to Sean Arietta and Joe Palmer
0.5.6
Backported to support requests 0.8.2
0.5.5
Fixed reconnection in the event of server restart
Fixed calling on_reconnect() so that it is actually called
Set default Namespace=None
Added support for Python 3.4
0.5.3
Updated wait loop to exit if the client wants to disconnect
Fixed calling on_connect() so that it is called only once
Set heartbeat_interval to be half of the heartbeat_timeout
0.5.2
Replaced secure=True with host=’https://example.com’
Fixed sending heartbeats thanks to Travis Odom
0.5.1
Added error handling in the event of websocket timeout
Fixed sending acknowledgments in custom namespaces thanks to Travis Odom
0.5
Rewrote library to use coroutines instead of threads to save memory
Improved connection resilience
Added support for xhr-polling thanks to Francis Bull
Added support for jsonp-polling thanks to Bernard Pratz
Added support for query params and cookies
0.4
Added support for custom headers and proxies thanks to Rui and Sajal
Added support for server-side callbacks thanks to Zac Lee
Added low-level _SocketIO to remove cyclic references
Merged Channel functionality into BaseNamespace thanks to Alexandre Bourget
0.3
Added support for secure connections
Added socketIO.wait()
Improved exception handling in _RhythmicThread and _ListenerThread
0.2
Added support for callbacks and channels thanks to Paul Kienzle
Incorporated suggestions from Josh VanderLinden and Ian Fitzpatrick
0.1
Wrapped code from StackOverflow
Added exception handling to destructor in case of connection failure
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
File details
Details for the file socketIO-client-2-0.7.5.tar.gz
.
File metadata
- Download URL: socketIO-client-2-0.7.5.tar.gz
- Upload date:
- Size: 601.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 6a493c46d830200774b72f4859fe5a0b85ba98c83fd650db31e082fb5bf6c933 |
|
MD5 | 994c7eb842c8fed63660b831081d6295 |
|
BLAKE2b-256 | b38990701efc6bc72d3445c8b5806b2277b74ec6c9de4f5ba19b0cbd4fe5ee8c |