HeartbeatingΒΆ

pseud allows you to build your own Heartbeat Backend. Your implementation must conform to its Interface defined in pseud.interfaces.IHeartbeatBackend

Also all your plugin must adapts pseud.interfaces.IClient or pseud.interfaces.IServer and being registered thanks to pseud.utils.register_heartbeat_backend() decorator.

Heartbeat backends aim to define your the policy you need regarding exclusion of disconnected peer, e.g.. after 3 heartbeat missed, you can decide to exclude peer from list of known connected peers.

Also, very important, thanks to heartbeat backends you can maintain an accurate list of currently connected clients and their ids. It is up to you to decide to store this list in memory (simple dict), or to use redis if you think the number of peers will be huge.

You can start with the following snippet

@register_heartbeat_backend
@zope.interface.implementer(IHeartbeatBackend)
@zope.component.adapter(IClient)
class MyHeartbeatBackend(object):
    name = 'my_heartbeat_backend'

    def __init__(self, rpc):
        self.rpc = rpc

    def handle_heartbeat(self, user_id, routing_id):
        pass

    async def handle_timeout(self, user_id, routing_id):
        pass

    def configure(self):
        pass

    def stop(self):
        pass

In this example the name ‘my_heartbeat_backend’ will be used when instanciating your RPC endpoint.

client = pseud.Client('remote',
                      heartbeat_plugin='my_heartbeat_backend')

Read Protocol v1 for more explanation. Also in pseud.heartbeat you will find examples that are used in tests.