Пользовательский ввод PyZMQ() в коммуникационном архетипе PAIR/PAIR

Я использую PyZMQ для создания простого шаблона обмена сообщениями PAIR/PAIR.

Парный сервер

import zmq
import random
import sys
import time

port = "9999"
context = zmq.Context()
socket = context.socket(zmq.PAIR)
print("Binding socket to port: " + str(port))
socket.bind("tcp://*:%s" % port)
print("Connection has been established")

while True:
    data = input("Enter: ")
    socket.send_string(data)
    msg = str(socket.recv(), "utf-8")
    print("Received: ",msg)
    time.sleep(2)

ПараКлиент

import zmq
import random
import sys
import time

port = "9999"
context = zmq.Context()
socket = context.socket(zmq.PAIR)
print("Connecting socket to port: " + str(port))
socket.connect("tcp://localhost:%s" % port)
print("Connected")

count = 0
response = 1

while True:
    msg = str(socket.recv(), "utf-8")
    print("Received: ",msg)
    count = count + 1
    print("Counter: ",count)

    if count == response:
        data = "Client has received message from server: " + msg
        socket.send_string(data)
        response = response + 1
        time.sleep(2)

Я не могу отправлять пользовательский ввод с сервера на клиент, так как ничего не передается, когда я нажимаю ввод, но я могу отправлять и получать жестко закодированные сообщения с сервера на клиент. Когда я это делаю, сообщения, полученные со стороны сервера, иногда будут получены на стороне клиента. Я не уверен, связано ли это с тем, что оба скрипта запускаются на локальном хосте и в сокете есть конфликт.

Например,

Парный сервер

data = "random data"

ПараКлиент

Выход:

Received:  random data
Counter:  4
Received:  Client has received message from server: random data
Received:  random data
Counter:  5
Received:  random data
Counter:  6

Как отправить пользовательский ввод и предотвратить получение полученных сообщений от клиента на сервер клиентом на локальном хосте (если это проблема)?


person Jero    schedule 20.12.2017    source источник


Ответы (1)


Я устранил проблему input(). Я понял, что Sublime3 не может запускать команды ввода. Я исправил это, установив пакет SublimeREPL.

Хотя у меня до сих пор нет конкретного представления, почему иногда полученные сообщения от клиента к серверу принимаются клиентом на локальном хосте.

person Jero    schedule 20.12.2017