Простой Python. современный стиль программирования - читать онлайн бесплатно полную версию книги . Страница 360

$ python udp_time_server.py

Starting the server at 2014-06-02 20:28:47.415176

Waiting for a client to call.

Запустите клиент в другом окне:

$ python udp_time_client.py

Starting the client at 2014-06-02 20:28:51.454805

Через 5 секунд вы начнете видеть сообщения в обоих окнах. Так выглядят пер-

вые три строки от сервера:

Server sent b'2014-06-03 01:28:56.462565'

Server sent b'2014-06-03 01:29:01.463906'

Server sent b'2014-06-03 01:29:06.465802'

А так — первые три строки от клиента:

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

Глава 11. Конкуренция и сети

467

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)