2011-11-20 14 views
3

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

PS は私が原因サーバーbetwebb接続を確立するプロジェクトの高負荷に、だから、PS2 良いライブラリにTornadIO

を発見し、各クライアントが疑わしいです。私はc10k問題を恐れている。私の知識が不足しているだけかもしれません。

+1

私の答えを見る:http://stackoverflow.com/questions/3682198/writing-a-chat-application/3682211#3682211 – NullUserException

+0

それは良いですが、私は質問があります彗星。私は1万人のユーザーが接続しているのを恐れ、この後も誰も接続できません(c10k問題) – dizpers

+2

多くのユーザーが私が1台のチャットサーバーに接続していることが予想される場合は、 – jwiscarson

答えて

1

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

はい、トルネードなどのリアルタイムWebサーバーを使用しています。 TornadIOは、古いブラウザの代替オプションを持つsocket.ioを使用するので、良い解決策のように見えます。

Wikipedia entry on the C10k issuesは、この問題を解決しているサーバのリストを提供します。

いくつかのWebサーバがC10K問題に対処するために開発されている:event-に依存している

  • nginxのを、 (WordPress.comはnginxを使ってC10Kの問題を解決しています)[2]
  • Lighttpdは要求を処理するために非同期アーキテクチャに依存しています[3]
  • チェロキー、軽量ウェブサーバ[4]
  • 竜巻、非ブロッキングウェブサーバ及びウェブアプリケーションフレームワーク[5]、Pythonで書かれた
  • アパッチ器用、非同期、JVM
  • 上で実行されているウェブサーバーを非ブロッキング
  • JBoss Nettyは、プロトコルサーバーやクライアントなどのネットワークアプリケーションをすばやく簡単に開発できるNIOクライアントサーバーフレームワークです。[6]
  • GoogleのV8 JavaScriptエンジンで動作する非同期非ブロッキングWebサーバー[7] ]
  • EventMachine、Ruby EventMachine上で動作する非同期非ブロッキングWebサーバー
  • Erlangで書かれたWebサーバーYaws。 Erlangの非常に軽量なプロセスから利益を得ています。
  • メデューサ、Pythonの
  • で書かれたノン・ブロッキングWebサーバのライブラリ

ご覧のとおり、トルネードが表示されます。

これ以外にも、サーバーからクライアントへの通知を達成する方法よりも、horizontal scalingの方が潜在的に多くの可能性があります。

あなたが選択するrealtime server solutionに応じて、これは問題になることはありません。たとえば、Caplin System's Liberatorという単一のインスタンスでは、10,000以上の永続接続を実現できます。

関連する問題