>Client read b'2014-06-03 01:28:56.462565'
>Client read b'2014-06-03 01:29:01.463906'
>Client read b'2014-06-03 01:29:06.465802'
Обе эти программы работают вечно, поэтому вам нужно завершать их вручную.
2. Используйте сокеты ZeroMQ REQ и REP, чтобы сделать то же самое.
Так выглядит файл zmq_time_server.py:
>import zmq
>from datetime import datetime
>host = '127.0.0.1'
>port = 6789
>context = zmq.Context()
>server = context.socket(zmq.REP)
>server.bind("tcp://%s:%s" % (host, port))
>print('Server started at', datetime.utcnow())
>while True:
>····#··Wait for next request from client
>····message = server.recv()
>····if message == b'time':
>········now = datetime.utcnow()
>········reply = str(now)
>········server.send(bytes(reply, 'utf-8'))
>········print('Server sent', reply)
А так — zmq_time_client.py:
>import zmq
>from datetime import datetime
>from time import sleep
>host = '127.0.0.1'
>port = 6789
>context = zmq.Context()
>client = context.socket(zmq.REQ)
>client.connect("tcp://%s:%s" % (host, port))
>print('Client started at', datetime.utcnow())
>while True:
>····sleep(5)
>····request = b'time'
>····client.send(request)
>····reply = client.recv()
>····print("Client received %s" % reply)
Для простых сокетов вам нужно сначала запустить сервер. С помощью ZeroMQ вы можете запустить первым как клиент, так и сервер:
>$ python zmq_time_server.py
>Server started at 2014-06-03 01:39:36.933532
>$ python zmq_time_client.py
>Client started at 2014-06-03 01:39:42.538245
Через 15 секунд вы должны увидеть сообщения от сервера:
>Server sent 2014-06-03 01:39:47.539878
>Server sent 2014-06-03 01:39:52.540659
>Server sent 2014-06-03 01:39:57.541403
Эти строки вы должны увидеть в сообщении от клиента:
>Client received b'2014-06-03 01:39:47.539878'
>Client received b'2014-06-03 01:39:52.540659'
>Client received b'2014-06-03 01:39:57.541403'
3. Попробуйте сделать то же самое с помощью XMLRPC.
Сервер xmlrpc_time_server.py:
>from xmlrpc.server import SimpleXMLRPCServer
>def now():
>····from datetime import datetime
>····data = str(datetime.utcnow())
>····print('Server sent', data)
>····return data
>server = SimpleXMLRPCServer(("localhost", 6789))
>server.register_function(now, "now")
>server.serve_forever()
И клиент xmlrpc_time_client.py:
>import xmlrpc.client
>from time import sleep
>proxy = xmlrpc.client.ServerProxy("http://localhost:6789/")
>while True:
>····sleep(5)
>····data = proxy.now()
>····print('Client received', data)
Запустим сервер:
>$ python xmlrpc_time_server.py
Запустим клиент:
>$ python xmlrpc_time_client.py
Подождите примерно 15 секунд. Так выглядят первые три строки от сервера:
>Server sent 2014-06-03 02:14:52.299122