Comet コードのセットアップについてサポートが必要です
-
24-09-2019 - |
質問
誰かが方法を知っているか、Node.jsをNginx httpプッシュモジュールに接続してクライアントとブラウザー間の永続的な接続を維持できると考えていますか。
私は Comet を初めて使用するので、出版などを理解していないだけです。誰かがこれについて私を助けてくれるかもしれません。
これまでに設定したものは次のとおりです。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>
このことから理解できるのは、クライアントは /broadcast/sub=getIt が後に続く URL をリッスンし続けるということです。メッセージがある場合は、updateFeed が起動されます。
かなり基本的でわかりやすい IMO です。
Nginx httpプッシュモジュール構成
デフォルトタイプアプリケーション/オクテットストリーム;ファイルを送信します。キープアライブタイムアウト 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;
}
}
}
これで、nginx に /broadcast/sub への呼び出しをポート 80 でリッスンするように指示し、/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 にリダイレクトするだけで、正常に機能しました。
Comet が理解できる方法で Node.js を動作させる方法についてアイデアを持っている人はいますか。本当にいいですね、たくさん助けてくれるでしょう。
資源
使用済み
- これをNode.jsの代わりにrubyで行う例
- jQuery.comet
- Nginx HTTP プッシュ モジュールのホームページ
- フェイ:Node.js および Rack 用の Comet クライアントおよびサーバー
faye を使用するには Comet クライアントをインストールする必要がありますが、Nginx に付属しているクライアントを使用したいと考えています。だから私はフェイだけを使いません。nginx が使用するものはさらに最適化されています。
余分な
解決
上記のスクリプトでは、5秒ごとに発行者は、順番に、ロングポーリング接続はを開いていると待っている2人の加入者のにデータをプッシュし、当社のnginxのサーバーに新しいイベントを発しますデータ。メッセージは、各加入者に送信されると、nginxのは、その接続し、クライアントが、その後すぐに にそれらを再確立し、次の使用可能なメッセージを待つ閉じます。
nginxのは、メッセージのためのシンプルなretranslator(BTW非常に巧妙なセットアップ、リンクのおかげで)となっています。
短いそれを置くために:ブラウザは、あなたがやろうとしている接続のこの種のために可能ではありません。これが何であるかを WebSocketをの考案されました。
後、私は(私はあまりにもそれに興味があります)nginxので、この設定を使用するためにNode.jsの中でいくつかのコードを作成します。