1

私は次のようなことをしたい:

//client -> notifies server that client is connected.

//server -> begins fetching information from DB (series of both async and synchronous requests).

//as sets of data become available on server -> server pushes updates to client via res.render()

基本的に、クライアントにメニュー項目があり、サーバーがフェッチするデータの準備ができたら、そのメニューを更新したいと考えています。これを行う方法はありますか?できないことに気づく

res.render('something');
// again
res.render('somethingElse');

render が呼び出されると、応答が送信され、render を再度呼び出すことはできないためです。

「エラー: 送信後にヘッダーを設定できません。」

助言がありますか?

4

2 に答える 2

3

WebSocket を使用すると、次の利点があります。

http://en.wikipedia.org/wiki/WebSocket

この投稿には少しの情報があります:

Node.js で使用する websocket ライブラリはどれですか?

于 2013-08-26T00:00:13.893 に答える
2

HTTP は、要求/応答を介して機能します。通常、応答が送信されると、接続は終了します。

サーバーからクライアントにデータをストリーミングするには、websocketsを使用できます。socket.ioと呼ばれる非常に人気のある node.js モジュールがあり、websocket の使用を簡素化します。

socket.io を使用すると、クライアント コードは次のようになります。

var socket = io.connect('http://yourserver.com');
socket.on('data', function (data) {
    updateMenu(data);
});

そしてサーバーコード:

var io = require('socket.io').listen(80);
io.sockets.on('connection', function (socket) {
    socket.emit('data', data);
    getMoreDataFromDb(function(data){
        socket.emit('data', data);
    });
    // etc..
});

または、より単純なソリューションが必要な場合は、すべてのデータを取得するまで、サーバーに対して複数の小さな ajax リクエストを行うことができます。

(function getData(dataId){ 

    $.ajax({
        url:"yourserver.com/getdata",
        data: dataId || {},
        success:function(data){
            updateMenu(data);
            if(data) getData({ lastDataReceived: data.lastId }); // server is still returning data, request more
        }
    });

})();
于 2013-08-26T01:06:03.517 に答える