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 из тестов
К сожалению, запрос на получение доступа был закрыт, и функция асинхронности все еще не реализована.
Если вы посмотрите на примеры, которые они предоставляют, все они полагаются на тайм-ауты, что означает, что разработчики признают проблему. По моему мнению, эта библиотека не готова к использованию, из-за этой зависимости от времени ожидания.