Есть довольно крутой пакет под названием signalhub . Он имеет серверный компонент nodejs и материал, который вы можете использовать в браузерах своих пользователей. Он использует не очень известное приложение протокола http (https) под названием EventSource . EventSource в основном открывает постоянные http (https) соединения с веб-сервером.
Это надежная и легкая установка. (README говорит о сигнализации WebRT C, но это полезно для гораздо большего.)
На стороне сервера простая, но эффективная настройка сервера может выглядеть следующим образом:
module.exports = function makeHubServer (port) {
const signalhubServer = require('signalhub/server')
const hub = signalhubServer({ maxBroadcasts: 0 })
hub.on('subscribe', function (channel) {
/* you can, but don't have to, keep track of subscriptions here. */
})
hub.on('publish', function (channel, message) {
/* you can, but don't have to, keep track of messages here. */
})
hub.listen(port, null, function () {
const addr = hub.address()
})
return hub
}
В браузере вы можете делать такие вещи. Это пользователь GET, чтобы открыть постоянный EventSource для получения сообщений. И когда приходит время отправить сообщение, оно отправляет его.
И вкладка Chromium devtools Network знает все о подключениях EventSource.
const hub = signalhub('appname', [hubUrl])
...
/* to receive */
hub.subscribe('a-channel-name')
.on('data', message => {
/* Here's a payload */
console.log (message)
})
...
/* to send */
hub.broadcast('a-channel-name', message)