zeromq. js - Ожидание соединения - PullRequest
1 голос
/ 09 мая 2020

В документации для метода connect сказано:

Подключается к сокету по заданному удаленному адресу и немедленно возвращается. Соединение будет выполнено асинхронно в фоновом режиме.

Но, await кажется неприменимым, как показано в их примере кода абонента.

subscriber.js

const zmq = require("zeromq")

async function run() {
  const sock = new zmq.Subscriber

  sock.connect("tcp://127.0.0.1:3000") //Happens async; can we await this?
  sock.subscribe("kitty cats")
  console.log("Subscriber connected to port 3000")

  for await (const [topic, msg] of sock) {
    console.log("received a message related to:", topic, "containing message:", msg)
  }
}

run()

Кроме того, какие ошибки могут возникать при использовании метода connect()? Я указал "неприличный" номер порта, например, 8124000, для подключения. Я надеялся, что появятся сообщения об ошибках.

1 Ответ

1 голос
/ 09 мая 2020

Q : «какие ошибки могут быть вызваны методом connect()


В случае, если кто-то никогда не работал с ZeroMQ ,
, вы можете здесь впервые взглянуть на "ZeroMQ Принципы менее чем за Пять секунд"
перед тем, как углубиться в детали



Часть ошибок

ZeroMQ собственный API выделяет (без изменений с v2.1) следующие ошибки:

EINVAL
Указанная конечная точка недействительна.
EPROTONOSUPPORT
Запрошенный транспортный протокол не поддерживается.
ENOCOMPATPROTO
Запрошенный транспортный протокол несовместим с типом сокета.
ETERM
Контекст ØMQ, связанный с указанным сокетом, был прерван.
ENOTSOCK
Указанный сокет недействителен.
EMTHREAD
Нет потоков ввода / вывода для поддержки li sh задача.

Тем не менее, ваш реальный наблюдатель зависит от zeromq.js перенастройки этих основных состояний, поэтому лучший следующий шаг - перечитайте исходный код оболочки, чтобы увидеть, как эти состояния ошибок собственного API фактически обрабатываются внутри zeromq.js -wrapper.

Примечания:

Следующие события сокета могут быть сгенерированы. Этот список может отличаться в зависимости от используемой версии ZeroMQ.

Обратите внимание, что событие ошибки избегается благодаря дизайну , так как это имеет особое поведение в Node.js вызывает исключение, если оно не обработано.

Другое имена ошибок настроены так, чтобы они были как можно ближе к возможным, чем имена других сетевых событий в Node.js и / или к соответствующему вызову метода ZeroMQ.js. События (включая любые ошибки), соответствующие определенной операции c, обозначаются двоеточием: например, bind:error или connect:retry.

тем не менее являются предупреждением, не так ли?


Часть await

MCVE-код (как есть) не может воспроизвести живую сессию, поэтому лучше всего адаптировать MCVE-код, чтобы он стал работоспособным, и мы можем продолжить работу над этим.

...