ws4py provides a high-level, yet simple, interface to provide your application with WebSocket support. It is simple as:

from ws4py.websocket import WebSocket

The WebSocket class should be sub-classed by your application. To the very least we suggest you override the received_message(message) method so that you can process incoming messages.

For instance a straightforward echo application would look like this:

class EchoWebSocket(WebSocket):
    def received_message(self, message):
        self.send(, message.is_binary)

Other useful methods to implement are:

You may want to know if the connection is currently usable or terminated.

At that stage, the subclass is still not connected to any data source. The way ws4py is designed, you don’t necessarily need a connected socket, in fact, you don’t even need a socket at all.

>>> from ws4py.messaging import TextMessage
>>> def data_source():
>>>     yield TextMessage(u'hello world')

>>> from mock import MagicMock
>>> source = MagicMock(side_effect=data_source)
>>> ws = EchoWebSocket(sock=source)
>>> ws.send(u'hello there')