0

さて、私はチャット環境のようなものを作り上げています、そして私はリアルタイムではないにしてもほぼリアルタイムで会話したいと思っています。しかし、ブラウザはドメインごとのトランザクションに対して一度に2つのスレッドしか放棄しないことを私は知っています。だから私はブラウザに実際に影響を与えることなく同期チャットをする方法を見つけようとしています。また、ブラウザが同期リクエストでロックする傾向があることも知っています。

したがって、サイト上でチャットのような環境を最初から作成するための最良のアプローチは何ですか?DBとスクリプトの概念が適切であると仮定し、接続を管理し、ブラウザーを混雑させてそれを引き起こさない永続的な接続を維持する方法を考えますおそらくフリーズします。

誰もがアイデアを持っています..私はフラッシュ、またはJavaベースのソリューションを探していません。私も毎秒ポーリングしたくないです。しかし、スタックの印象とは何ですか、あなたはどうしますか。

4

2 に答える 2

2

まず、仕様では2つの接続が許可されていることのみが示されています。最近のほとんどのブラウザは、実際には最大6つをサポートしています。

純粋なJavascriptからチャットシステムを作成するために受け入れられている主な方法は3つあります。

ポーリング

最初の解決策は単純で、数秒ごとにサーバーをポーリングして(5は適切な数値です)、何が欠落しているかを確認するだけです。シンプルかつ効率的に機能しますが、注意しないと大量の不要なリクエストが発生し、サーバーに不要な負荷がかかる可能性があります。

これをより適切に実装するには、前回のチャットの更新以降に何かが発生したかどうかを確認するためのポーリングが含まれます。発生した場合は、何が発生したかを確認するプロセスを実行します。サーバーの負荷と帯域幅を節約します。

待っている

この方法はより一般的に使用され、ブラウザがサーバーに要求を送信しますが、これは決して実行されず、代わりに「応答を待機」し続けます。何かが起こると、サーバーはそれを出力して要求を実行し、クライアントは別の要求を行い、プロセスが繰り返されます。これにより、リクエストを節約できますが、サーバー上で進行中のプロセスのバックログが発生する可能性があります。

WebSocket

https://developer.mozilla.org/en/WebSockets

これには、サーバーへの直接ソケット接続を作成し、必要に応じてデータをクライアントにプッシュできるようにすることが含まれます。ただし、これは比較的新しいものであり、特に古いブラウザでは、互換性の問題が発生する可能性があります。

これらのうち、特に「最良の方法」はありません。それはあなたが何を目指しているか、そして何が重要かによります。最新のブラウザ用に設計されたサイトがある場合は、WebSocketが答えになる可能性がありますが、サーバーが小さい場合は、たとえば、ポーリングの方が適している可能性があります。

于 2012-06-06T01:37:34.473 に答える
0

私自身のチャットエンジンは5秒ごとに新しいメッセージをチェックします。それは、誰も違いを知らないほど瞬時に近いです。

と同じくらい簡単setInterval(updateChat,5000);です。

于 2012-06-06T01:35:51.730 に答える