node-nanomsg - подписчик не получает сообщения

У меня два .js файлы - pub.js для публикации и sub.js для подписки. Эти файлы на самом деле являются "разделенной" версией примера, показанного на сайте GitHub node-nanomsg. 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 ответ

Решение

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

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

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

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

Другие вопросы по тегам