サーバー側でpython(Tornado)を使用し、クライアント側でJavaScriptを使用しています。あるユーザーが別のユーザーにメッセージを送信するという一般的な状況があります。そして、サーバーが新しいメッセージについてクライアントのブラウザー (メッセージの受信者) に通知するようにします。どうすればいいですか?クライアント (おそらく websocket を使用) との長期接続を確立する必要がありますか?
Tornado などのリアルタイム Web サーバーを使用する - はい。TornadIO は、古いブラウザー用のフォールバック オプションを備えた socket.io を使用するため、優れたソリューションのように見えます。
C10k の問題に関するウィキペディアのエントリには、この問題を解決したサーバーのリストが記載されています。
C10K の問題に対処するために、いくつかの Web サーバーが開発されています。
- リクエストを処理するために、スレッドではなくイベント駆動型 (非同期) アーキテクチャに依存する nginx (WordPress.com は nginx を使用して C10K 問題を解決します)[2]
- 要求を処理するために非同期アーキテクチャに依存する Lighttpd[3]
- 軽量 Web サーバーであるチェロキー[4]
- Python で記述されたノンブロッキング Web サーバーおよび Web アプリケーション フレームワークである Tornado[5]
- JVM 上で動作する Apache Deft、非同期、ノンブロッキング Web サーバー
- JBoss Netty、プロトコル サーバーやクライアントなどのネットワーク アプリケーションの迅速かつ簡単な開発を可能にする NIO クライアント サーバー フレームワーク[6]
- Google の V8 JavaScript エンジンで実行される Node.js、非同期、ノンブロッキング Web サーバー[7]
- Ruby EventMachine で実行される非同期のノンブロッキング Web サーバーである EventMachine
- Yaws、Erlang で書かれた Web サーバー。Erlang の非常に軽量なプロセスから利益を得ています。
- Medusa、Python で書かれたノンブロッキング Web サーバー ライブラリ
ご覧のとおり、Tornado がリストされています。
これを超えて、あなたの質問は、サーバーからクライアントへの通知を実現する方法よりも、水平スケーリングに関する可能性があります。
選択したリアルタイム サーバー ソリューションによっては、これが問題になることはありません。たとえば、Caplin System の Liberator の1 つのインスタンスは、10,000 をはるかに超える永続的な接続を実現できます。