Почему пример ZeroMQ не работает? - PullRequest
0 голосов
/ 05 июня 2018

Я новичок в Python / ZeroMQ, поэтому покажите терпение, если это простой вопрос.

Я пытаюсь запустить некоторые примеры, но это не очень хорошо работает.
Вот hwserver /hwclient-пример ZeroMQ-Guide:


SERVER

#   Hello World server in Python
#   Binds REP socket to tcp://*:5555
#   Expects b"Hello" from client, replies with b"World"
#

import time
import zmq
context = zmq.Context()
socket = context.socket(zmq.REP)
socket.bind("tcp://*:5555")

while True:

    message = socket.recv()               #  Wait for next request from client
    print("Received request: %s" % message)

    time.sleep(1)                         #  Do some 'work'

    print( "teeest" )

    socket.send(b"World")                 #  Send reply back to client

CLIENT

#    Hello World client in Python
#    Connects REQ socket to tcp://localhost:5555
#    Sends "Hello" to server, expects "World" back
#

import zmq

context = zmq.Context()

print("Connecting to hello world server…")    #  Socket to talk to server
socket = context.socket(zmq.REQ)
socket.connect("tcp://localhost:5555")


for request in range(10):                     #  Do 10 requests,
    #                                         #  waiting each time for a response
    print("Sending request %s …" % request)
    socket.send(b"Hello")

    message = socket.recv()                   #  Get the reply.
    print("Received reply %s [ %s ]" % (request, message))

И я получаю этот вывод:

Connecting to hello world server…
Sending request 0 …
Received reply 0 [ b'World' ]
Sending request 1 …
Received reply 1 [ b'World' ]
Sending request 2 …
Received reply 2 [ b'World' ]
Sending request 3 …
Received reply 3 [ b'World' ]
Sending request 4 …
Received reply 4 [ b'World' ]
Sending request 5 …
Received reply 5 [ b'World' ]
Sending request 6 …
Received reply 6 [ b'World' ]
Sending request 7 …
Received reply 7 [ b'World' ]
Sending request 8 …
Received reply 8 [ b'World' ]
Sending request 9 …
Received reply 9 [ b'World' ]

Process finished with exit code 0

Может кто-нибудь сказать мне, почему я не получаю распечатки с сервера, такие как «Полученный запрос» и «teeeest»?

Спасибо!

Ответы [ 2 ]

0 голосов
/ 05 июня 2018

почему Я не получаю распечатки с сервера, такие как «Полученный запрос» и «teeeest»?

Хорошо,
вы действительно получаете их,
, но , потому что вы не смотрите вправо (оба) место (s) (если читаете также из серверного PyCharm/ Окно терминала, вы увидите их - это хорошая новость ).

Добро пожаловать в .Имея две «роли», танцующие вместе (как закодировано в REQ/REP или другом из архетипов масштабируемой формальной модели общения ZeroMQ), вы должны проверить обе стороны распределенного танца чтобы увидеть всю картину.

Наблюдение только одной стороны оставляет вас без полной истории.

Чтобы сделать это более легко видимым, давайте немного изменим код:


MOD SERVER:

import time
import zmq
context = zmq.Context()
socket  = context.socket( zmq.REP ); socket.bind( "tcp://*:5555" )

while True:
    message = socket.recv()               #  Wait for next request from client
    print( "TERMINAL[1]: SERVER has received request: %s" % message )
    time.sleep(1)                         #  Do some 'work'
    print( "TERMINAL[1]: SERVER puts teeest......................." )

    socket.send( b"World" )               #  Send reply back to client

MOD КЛИЕНТА:

import zmq

context = zmq.Context()

print( "TERMINAL[2] CLIENT says Connecting to hello world server…" )    

socket = context.socket( zmq.REQ )            #  Socket to talk to server
socket.connect( "tcp://localhost:5555" )

for request in range( 10 ):                   #  Do 10 requests,
    #                                         #  waiting each time for a response
    print( "TERMINAL[2] CLIENT Sending request %s …" % request )
    socket.send( b"Hello" )

    message = socket.recv()                   #  Get the reply.
    print( "TERMINAL[2] CLIENT Received reply %s [ %s ]" % ( request, message ) )

И этот вывод вы уже «знаете»:

TERMINAL[2] CLIENT says Connecting to hello world server…
TERMINAL[2] CLIENT Sending request 0 …
TERMINAL[2] CLIENT Received reply 0 [ b'World' ]
TERMINAL[2] CLIENT Sending request 1 …
TERMINAL[2] CLIENT Received reply 1 [ b'World' ]
TERMINAL[2] CLIENT Sending request 2 …
TERMINAL[2] CLIENT Received reply 2 [ b'World' ]
TERMINAL[2] CLIENT Sending request 3 …
TERMINAL[2] CLIENT Received reply 3 [ b'World' ]
TERMINAL[2] CLIENT Sending request 4 …
TERMINAL[2] CLIENT Received reply 4 [ b'World' ]
TERMINAL[2] CLIENT Sending request 5 …
TERMINAL[2] CLIENT Received reply 5 [ b'World' ]
TERMINAL[2] CLIENT Sending request 6 …
TERMINAL[2] CLIENT Received reply 6 [ b'World' ]
TERMINAL[2] CLIENT Sending request 7 …
TERMINAL[2] CLIENT Received reply 7 [ b'World' ]
TERMINAL[2] CLIENT Sending request 8 …
TERMINAL[2] CLIENT Received reply 8 [ b'World' ]
TERMINAL[2] CLIENT Sending request 9 …
TERMINAL[2] CLIENT Received reply 9 [ b'World' ]

Итак,
затем просто посмотрите в другое окно / терминал,
, где вы увидите все намеченные стороны SERVER print() -s:

TERMINAL[1]: SERVER has received request: b'Hello'
TERMINAL[1]: SERVER puts teeest.......................
TERMINAL[1]: SERVER has received request: b'Hello'
TERMINAL[1]: SERVER puts teeest.......................
TERMINAL[1]: SERVER has received request: b'Hello'
TERMINAL[1]: SERVER puts teeest.......................
TERMINAL[1]: SERVER has received request: b'Hello'
TERMINAL[1]: SERVER puts teeest.......................
TERMINAL[1]: SERVER has received request: b'Hello'
TERMINAL[1]: SERVER puts teeest.......................
TERMINAL[1]: SERVER has received request: b'Hello'
TERMINAL[1]: SERVER puts teeest.......................
...

Заинтересованы в том, чтобы как можно быстрее освоить ZeroMQ?

Может наслаждаться еще 5-секундным чтением
о главном понятииразличия в [иерархия ZeroMQ менее чем за пять секунд] или другие сообщения и обсуждения здесь.

0 голосов
/ 05 июня 2018

Не клиент должен печатать teeest, а сервер, потому что print( "teeest" ) предписано выполнить в файле сервера.

Ваш вывод показывает выходные данные клиента, но не сервераодин.

...