クライアントとブラウザ間の永続的な接続を維持するために、Node.jsをNginx http pushモジュールに接続する方法を知っている人はいますか?
私はコメットが初めてなので、出版などを理解していないだけで、誰かがこれを手伝ってくれるかもしれません。
これまでに設定したものは次のとおりです。jQuery.comet プラグインをダウンロードし、次の基本的なコードをセットアップしました。
クライアント JavaScript
<script type="text/javascript">
function updateFeed(data) {
$('#time').text(data);
}
function catchAll(data, type) {
console.log(data);
console.log(type);
}
$.comet.connect('/broadcast/sub?channel=getIt');
$.comet.bind(updateFeed, 'feed');
$.comet.bind(catchAll);
$('#kill-button').click(function() {
$.comet.unbind(updateFeed, 'feed');
});
</script>
このことから私が理解できることは、クライアントは URL に続いて /broadcast/sub=getIt をリッスンし続けるということです。メッセージがあると、updateFeed が起動されます。
かなり基本的でわかりやすいIMO。
Nginx http プッシュ モジュール構成
default_type アプリケーション/オクテット ストリーム; sendfile オン; キープアライブ_タイムアウト 65; push_authorized_channels_only オフ;
server {
listen 80;
location /broadcast {
location = /broadcast/sub {
set $push_channel_id $arg_channel;
push_subscriber;
push_subscriber_concurrency broadcast;
push_channel_group broadcast;
}
location = /broadcast/pub {
set $push_channel_id $arg_channel;
push_publisher;
push_min_message_buffer_length 5;
push_max_message_buffer_length 20;
push_message_timeout 5s;
push_channel_group broadcast;
}
}
}
これで、/broadcast/sub への呼び出しをポート 80 でリッスンするよう nginx に指示し、/broadcast/pub に送信された応答を返します。
かなり基本的です。この部分は理解するのがそれほど難しくなく、インターネット上で十分に文書化されています。ほとんどの場合、ブロードキャストを行うこの背後に ruby または php ファイルがあります。
私の考えは、 node.js をブロードキャストすること
/broadcast/pub
です。persistent streaming data
これにより、接続を切断することなくサーバーからクライアントにアクセスできるようになると思います。リクエストをループしてロングポーリングアプローチを試しましたが、これはより効率的だと思います。
それとも、これは機能しませんか。
Node.js ファイル
Node.js を作成するのに迷っています。まず最初に、node.js をこのように動作させる方法がわかりません。
ロングポーリングに使用したセットアップは次のとおりです。
var sys = require('sys'),
http = require('http');
http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/html'});
res.write(new Date());
res.close();
seTimeout('',1000);
}).listen(8000);
これはポート 8000 をリッスンし、応答変数に書き込むだけです。
長いポーリングの場合、nginx.config
次のようになりました。
server {
listen 80;
server_name _;
location / {
proxy_pass http://mydomain.com:8080$request_uri;
include /etc/nginx/proxy.conf;
}
}
これにより、ポート 80 が 8000 にリダイレクトされ、問題なく動作しました。
コメットが理解できるように Node.js を動作させる方法について、誰か考えを持っている人はいますか? 本当にいいだろうし、あなたは私を大いに助けてくれるでしょう.
資源
使用済み
- これを Node.js の代わりに ruby で行う例
- jQuery.comet
- Nginx HTTP プッシュ モジュールのホームページ
- Faye: Node.js および Rack 用の Comet クライアントおよびサーバー
faye を使用するにはコメット クライアントをインストールする必要がありますが、Nginx で提供されているものを使用したいと考えています。それが私がフェイだけを使わない理由です。nginx が使用するものは、はるかに最適化されています。
追加