node-nanomsg - подписчик не получает сообщения - PullRequest
0 голосов
/ 20 ноября 2018

У меня есть два .js файла - pub.js для публикации и sub.js для подписки.Эти файлы на самом деле являются «разделенной» версией примера, показанного на сайте node-nanomsg GitHub .pub.js пишет в tcp://127.0.0.1:7789 и sub.js читает из того же.Сначала я запускаю sub.js, а затем pub.js.В то время как pub.js завершается быстро, sub.js никогда не получает сообщение.

pub.js

var nano = require('nanomsg')
var pub = nano.socket('pub')
pub.bind('tcp://127.0.0.1:7789')
//
pub.send('Hello')
pub.close()

sub.js

var nano = require('nanomsg')
var sub = nano.socket('sub')
sub.connect('tcp://127.0.0.1:7789')
//
sub.on('data', function(buf) {
    console.log(String(buf))
    sub.close()
})

ОБНОВЛЕНИЕ

Если pub.js записано так, как показано ниже, и sub.js началось сначала, то связь происходит.

var nano = require('nanomsg')
var pub = nano.socket('pub')
pub.bind('tcp://127.0.0.1:7789')
//
setTimeout(() => {
    pub.send('Hello')
},2000)
//pub.close()

Но парадигма pub-sub не требует, чтобы издатели и подписчики былиосознавать друг друга.Как включить систему pub-sub с nanomsg?

1 Ответ

0 голосов
/ 20 ноября 2018

Похоже, что сообщение закрыто издателем до завершения привязки сокета tcp.

Библиотека не предоставляет асинхронные версии bind и connect, и кажется, что bind не завершает полностью выполнение, когда функция возвращается.Добавление тайм-аута - это просто обходной путь для этой проблемы.

См. Это обсуждение в их репозитории Github: переписать bind / connect и удалить setTimeouts из тестов
К сожалению, запрос на извлечение закрыт иасинхронная функция все еще не реализована.

Если вы посмотрите на примеры , которые они предоставляют, все они полагаются на тайм-ауты, что означает, что разработчики признали проблему.По моему мнению, эта библиотека не готова к производственному использованию из-за этой зависимости от времени ожидания.

...