Qual è il modo corretto per trasformare il famoso modulo ws in una API reattiva in Node.js? Capisco che i soggetti possano aiutare a superare eventi non reattivi a eventi reattivi, ma il loro problema è che hanno un tempo molto più difficile per smaltire i loro oggetti dipendenti.Come trasformare correttamente WS Server in RXJS Api senza soggetti nei NodeJ
var WebSocketServer = require('ws').Server;
var wss = new WebSocketServer({ port: 8080 });
var Rx = require('rx');
var connectionMessageSubject = new Rx.Subject();
wss.on('connection', function connection(client) {
ws.on('message', function incoming(message) {
connectionMessageSubject.onNext({
client: client,
message: message
});
});
});
non posso usare il loro costruito nel metodo fromEvent perché, registra tanti eventi diversi che NodeJS getta un avviso quando 30 o più client si connettono.
Per esempio ...
var WebSocketServer = require('ws').Server;
var wss = new WebSocketServer({port:8080});
var connectionMessageObservable;
//this uses a tremendous amount of memory and throws warnings that the event emitter has a maximum of 30 listeners
wss.on('connection', function connection(client){
connnectionMessageObservable = Rx.Observable.fromEvent(client, 'message');
});
Date un'occhiata a [Rx.DOM.fromWebSocket()] (https://github.com/Reactive-Extensions/RxJS-DOM/blob/master/src/websocket.js). Dovresti essere in grado di clonare sostanzialmente quel metodo e cambiarlo per funzionare con il modulo ws nodeJs. Il modello è un attrezzo da usare. – Brandon
FWIW, ho riscritto un sacco di daWebSocket poco fa. Questo pattern è un buon pattern per il wrapping di qualcosa come WS in Node. –
Inoltre, ho un PR per un operatore 'singleInstance' che * potrebbe * aiutare per questo scenario, se trovi che devi pubblicare(). RefCount() il tuo ws wrapper e cancellarlo completamente a volte. –