From 036cc361865d76d6421a15f7dc657d8a9f96e760 Mon Sep 17 00:00:00 2001 From: dave Date: Sun, 17 Sep 2017 19:11:53 -0700 Subject: [PATCH] add ping-pong example --- examples/ping.py | 60 ++++++++++++++++++++++++++++++++++++++++++++++++ msgbus/server.py | 2 +- 2 files changed, 61 insertions(+), 1 deletion(-) create mode 100644 examples/ping.py diff --git a/examples/ping.py b/examples/ping.py new file mode 100644 index 0000000..129db95 --- /dev/null +++ b/examples/ping.py @@ -0,0 +1,60 @@ +from contextlib import closing +from msgbus.client import MsgbusSubClient +from time import time, sleep + + +def pong(host, port): + """ + Subscribe to the ping channel and send pongs in reply + """ + with closing(MsgbusSubClient(host, port)) as client: + client.sub("ping") + while True: + _, msg = client.recv() + client.pub("pong", msg) + print("pong(): >< {} {}".format(_, msg)) + + +def ping(host, port, message, count=5, interval=1): + """ + Send a ping and wait for the reply. In a loop + """ + with closing(MsgbusSubClient(host, port)) as client: + client.sub("pong") + sleep(1) + + while count > 0: + count -= 1 + print("ping(): > ping", message) + start = time() + client.pub("ping", message) + _, msg = client.recv() + print("ping(): <", _, msg, "rtt:", round(time() - start, 6), "\n") + sleep(interval) + + +def main(): + import argparse + parser = argparse.ArgumentParser(description="send a message to a msgbus server") + parser.add_argument("-i", "--host", default="127.0.0.1", help="host to connect to") + parser.add_argument("-p", "--port", default=7003, help="port to connect to") + parser.add_argument("-m", "--mode", choices=["ping", "pong"], required=True, help="client mode") + parser.add_argument("--payload", default="hello", help="ping payload") + parser.add_argument("-c", "--count", type=int, default=5, help="how many pings") + parser.add_argument("--interval", type=int, default=1, help="ping interval") + args = parser.parse_args() + + if args.mode == "ping": + ping(args.host, args.port, args.payload, args.count, args.interval) + elif args.mode == "pong": + pong(args.host, args.port) + + # python3 examples/ping.py -m pong -i 127.0.0.1 -p 7100 & + # python3 examples/ping.py -m ping -i 127.0.0.1 -p 7100 + # ping(): > ping hello + # pong(): >< ping hello + # ping(): < pong hello rtt: 0.000666 + + +if __name__ == '__main__': + main() diff --git a/msgbus/server.py b/msgbus/server.py index 98f0f44..a4b7535 100644 --- a/msgbus/server.py +++ b/msgbus/server.py @@ -200,7 +200,7 @@ class MsgBusServer(object): while self.alive: for peer_addr in self.seed_peers: if not self.has_peer(peer_addr): - print("connecting to {}".format(peer_addr)) + print("Connecting to {}".format(peer_addr)) self.loop.call_soon(asyncio.ensure_future, self.connect_to_peer(peer_addr)) await asyncio.sleep(1)