7

私は実際にServer-Sent Events draftを利用する Web アプリケーションを作成しようとしています。私の知る限り、SSE は接続ごとに 1 つのスレッドを使用します。サーバーは 1 秒間もアイドル状態になることなくクライアントに継続的にデータを送信するため、スレッドをプールに戻すことはできません。

したがって、サーバーへの接続を処理するために Node.JS (これまでは使用していません) を使用しようとしています。私はHTML5 Rocks の SSE 入門を読んでおり、SSE と Node.JS を統合するコード サンプルがあります。

ただし、Node.JS が何千ものクライアント接続を同時に処理し、Apache サーバーよりも効率的にサーバーを利用できるかどうかについては混乱しています。ノードがここでどのように動作するかを理解するのを手伝ってくれる人はいますか?

少し曖昧に聞こえたらごめんなさい。できるだけ多くの説明をする準備ができています! ありがとう!

4

4 に答える 4

4

php:

do {
  sendMsg($startedAt , time());
  sleep(5);
} while(true);

vs

node.js

setInterval(function() {
  constructSSE(res, id, (new Date()).toLocaleTimeString());
}, 5000);

睡眠がphpスレッドを5秒間ブロックするという違い。この5秒間、サーバーには専用のスレッドがまったく何もしない必要があります。ユーザーごとに1つのスレッド。

node.jsバージョンでは、setIntervalはスレッドをブロックしません。1つのnode.jsスレッドですべてのユーザーを処理できます。

于 2011-03-24T20:23:46.817 に答える
3

同時接続に関するnode.js イベント ループについての記事を参照してください。SSE は WebSocket よりもブラウザーでサポートされていないため、サーバー送信イベントではなく WebSocket を利用する Web アプリケーションを作成することをお勧めします。また、多くの WebSocket ベースの node.js モジュールとソース コードが GitHub にあり、「刺激を受ける」ことができます。

于 2011-03-25T07:55:06.997 に答える
2

しかし、Node.JS が数千のクライアント接続を同時に処理し、サーバーを Apache サーバーよりも効率的に利用するかどうかについては混乱していますか? ノードがここでどのように動作するかを理解するのを手伝ってくれる人はいますか?

イベント ループについて理解を深めるために、Understanding event loops and writing great code for Node.jsを読む必要があると思います。node.js では、CPU サイクルを大幅に節約できるブロッキングはありません。

また、TJ の電子ブックは、イベントを把握するのに役立ちます。何かが起こると、そのイベントに関連付けられたコールバックが呼び出されます。

于 2011-03-25T00:16:58.007 に答える
1

express + connect-sseを使用してみてください:

var sse, express, app;

sse = require('connect-sse')();
express = require('express')

app = express()
app.get('/events', sse, function (req, res) {
  res.json("this is an event");
  res.json({here: "is", another: "event"});
});
于 2012-10-11T22:15:02.163 に答える