4

サーバー側でpython(Tornado)を使用し、クライアント側でjavascriptを使用しています。私にはよくある状況があります。あるユーザーが別のユーザーにメッセージを送信します。そして、サーバーがクライアントのブラウザ(メッセージの受信者)に新しいメッセージについて通知するようにします。どうすればいいですか?クライアント(おそらくWebSocketを使用)または他の何かとの長期的な接続を確立する必要がありますか?

PS WebSocketを介して接続を確立するために、優れたライブラリTornadIOを見つけました

PS2したがって、接続を確立するプロジェクトの負荷が高いため、betwebbサーバーと各クライアントは疑わしいように見えます。私はc10k問題を恐れています。それは私の知識の欠如だけかもしれません。

4

1 に答える 1

2

サーバー側で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 をはるかに超える永続的な接続を実現できます。

于 2011-11-20T17:14:41.240 に答える