Простой Python. Современный стиль программирования (Любанович) - страница 286

>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