pseud allows you to build your own Heartbeat Backend.
Your implementation must conform to its
Interface defined in
Also all your plugin must
pseud.interfaces.IServer and being registered thanks to
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
you will find examples that are used in tests.