2011-07-10 17 views
0

私はクライアントとサーバーの間の同期化イベントを考えていました。それについての一般的な考え方は、クライアントが変更されたデータをチェックするために定期的にサーバーに要求する必要があるということです。それについての問題は、サーバサイドで変更されたものがなくても、クライアント側から起こっている不必要なリクエストが発生することです。だからイベントが起こったときにclien'tブラウザをリクエストすることは可能かもしれないと思ったが、それが可能かどうかわからない。最近、私はこれがhtml5で可能になると聞いてきました。サーバーはクライアントのブラウザを要求できますか?

ウェブ上のサーバーからclien'tブラウザを要求することはできますか?それは可能な場合、それは悪い練習ですか?リクエストクライアントにとって一般的なものは何ですか?

+0

が何を求めていることで、明確にする:

は、以下のリンクを参照してください。何かする? – sdolgy

答えて

1

ウェブソケットやそれらを抽象化するツールで可能です。同様の質問/シナリオのためのこの記事を参照してください。

Polling/pushing-question

1

HTML5はWebSocket APIへのクライアントのおかげに通知をプッシュするサーバーが可能になります。 WebSocket serverが必要です。そこには多くの実装があります。この仕様の唯一の問題は依然としてドラフトであり、変更される可能性があります。たとえば、仕様は最近Google Chromeブラウザで変更されました。そうすれば、それはまだ広く支持されていません。

0

サーバーはクライアントを要求しません。クライアントはHTML 5 WebSocketを開いて会話を初期化します。その後、そのソケットは開いたままになり、サーバーはいつでもクライアントにデータを戻すことができます。

「ロングポーリング」を使用してHTML 4でこれを行うことができます。クライアントはリクエストを行い、応答も長い期間開いたままにします。ここで問題となるのは、クライアントが同じソケットで別の要求を送信できないため、サーバーに2つのソケットを開く必要があることです.1つは要求を送信し、もう1つは応答を受け取ります。これは、多くのクライアントがサーバーに接続されていて、サーバーが処理できる接続数の上限に達している場合にのみ問題になります。

いずれの場合でも、クライアントが1つのスレッドを必要としないように、非ブロッキング(NIO)接続を使用するようにサーバーを構成する必要があります。サーバーを停止させてください。ノンブロッキングソリューションを使用すると、理論的にはサーバーインスタンスごとに50,000以上の接続を持つことができますが、多くの接続ですぐに処理できる要求のために、その有用性は疑問です。すべてのクライアントが1秒間に要求を出した場合、1ミリ秒あたり50要求を処理することになります。これは、データベースと共鳴する何かを行うのに十分な時間を与えることはまずありません。サーバがクライアントにアクションをプッシュすることは可能である場合

http://blog.maxant.co.uk/pebble/2011/06/21/1308690720000.html

http://blog.maxant.co.uk/pebble/2011/05/22/1306092969466.html

http://blog.maxant.co.uk/pebble/2011/03/05/1299360960000.html

関連する問題