2012-05-02 23 views
7

Byłem dobrze z node.js do czasu wdrożenia RxJS.RxJS + node.js Implementacja serwera HTTP?

Oto mój kod procesowy studying-

reaktywnie Przedłużanie/rxjs-węzeł https://github.com/Reactive-Extensions/rxjs-node


rx_http.js
(RxJS owinięcie z lib HTTP node.js)

var Rx = require("./rx.min"); 
var http = require("http"); 
for(var k in http) 
{ 
    exports[k] = http[k]; 
} 
exports.createServer = function() 
{ 
    var subject = new Rx.AsyncSubject(); 
    var observable = subject.asObservable(); 
    observable.server = http.createServer(function (request, response) 
    { 
     subject.onNext({ request:request, response:response }); 
     subject.onCompleted(); 
    }); 
    return observable; 
}; 

server.js

var http = require('./rx_http'); 

// rxServer 
var serverObservable = http.createServer(); 
var port = 3000; 
serverObservable.server.listen(port); 
console.log("Server listening on port: "+port); 

// HTTP request event loop function 
serverObservable.subscribe(function (data) 
{ 
    var req = data.request; 
    console.log(req.headers); 

    var res = data.response; 
    res.writeHead(200, {'Content-Type':"text/html"}); 
    res.end("hello world"); 

    console.log("res content out"); 
}); 

// exceptiopn 
process.on('uncaughtException', function (err) 
{ 
    console.log(['Caught exception:', err.message].join(" ")); 
}); 

kod kończy się jednorazowy 'Hello World' wyjście do przeglądarki i RxServer przestaje reagujące z innym dostępu (brwoser przeładowania etc.).

Jestem na dobrej drodze, aby nauczyć się rzeczy RxJS, ale niewiele dokumentów znaleziono w Internecie.

Poinformuj mnie, co jest nie tak z kodem, a jeśli znasz lepsze implementacje, udostępnij. Dziękuję.

Odpowiedz

3

Wezwanie zakończone na ten temat, gdy przychodzi pierwsze żądanie, kończy obserwowalną sekwencję. Czy możesz usunąć tę linię i spróbować ponownie.

Mam nadzieję, że to pomaga.

Ahmet Ali Akkas

+0

Zrobiłem to i to wszystkie żądania tylko powiesić ... – MaxWillmo

5

Zastosowanie Rx.Subject zamiast Rx.AsyncSubject w rx_http.js.

AsyncSubject buforuje ostatnią wartość onNext() i propaguje ją do wszystkich obserwatorów po zakończeniu. AsyncSubject

exports.createServer = function() 
{ 
    var subject = new Rx.Subject(); 
    var observable = subject.asObservable(); 
    observable.server = http.createServer(function (request, response) 
    { 
     subject.onNext({ request:request, response:response }); 
    }); 
    return observable; 
}; 
+1

jakiś pomysł jak wykorzystać node_module życzenie z Rx? Implementacja serwera Nodejs. Jak korzystać z https://www.npmjs.com/package/request za pomocą https://www.npmjs.com/package/rx, aby wysłać żądanie GET do https://www.reddit.com/r/javascript.json ? –

Powiązane problemy