2

これについてはいくつかの方向性が必要です。私はチャットルームのブラウザアプリケーションを書いていますが、微妙な違いがあります。

これらは、1人の人がlive 入力し、他の人が入力したときに他の人が入力したキーストロークを確認できるコラボレーションチャットです。

また、チャットスペースは1行ではなく、質問を入力するためのここ(SO)のようなテキストエリアスペースです。

タブ/スペース/入力を含むすべてのキーストロークは、他の人にライブで表示される必要があります。そして、一度に入力できるのは1人だけです(ロックは簡単なはずです)

複数のチャットルームアプリケーションを作成していません。両方がポートを介して通信している単純なクライアント/サーバーは、私が書いたものです。

だからここに質問があり
ます1.)複数のチャットルームアプリケーションはどのように書かれていますか?ポートベースでもありますか?
2.)他の人が入力するたびにキーストロークを表示することは、ajaxを介して可能だと思います。他に利用できるメカニズムはありますか?

注:Pythonフレームワーク(web2py)を使用しますが、ここではフレームワークは重要ではないと思います。

どんな提案でも大歓迎です、ありがとう!

4

2 に答える 2

1

/PRIVMSG #room-name Hello WorldIRCのようなことを試してみると、現在の「部屋」が、スペースで区切られたテキスト()の「前」にクライアントからサーバーに送信されます。たとえばROOMNAME Sample text、ブラウザからサーバーに送信できます。

AJAXを使用するのが最も合理的なオプションです。私はweb2pyを使用したことはありませんが、空想が必要な場合は、JSONを使用してブラウザーとサーバー間のデータを解析できると思います。

于 2011-04-15T03:40:39.103 に答える
1

Comet(プログラミング)のWikipediaエントリには、クライアントで実行できるさまざまなアプローチの概要が記載されており(クライアントがWebブラウザーであると想定)、これらのアプローチはサーバーの適切な設計を示唆しています(サーバーがWebサーバーであると想定)。 )。

そのページで言及されていないが、ほぼ確実に考えたいと思うことの1つは、クライアントでの入力のバッファリングです。すべてのユーザーのキーストロークがサーバーにヒットするマルチユーザーアプリケーションのスケーリングが不十分であると考えるのは時期尚早の最適化ではないと思います。ユーザーのキーストロークをクライアント側のバッファーに入れ、ユーザーが500ミリ秒ほど何も入力しなかった場合にのみサーバーに送信することを検討します。

このためにポートを使用することは絶対に避けてください。これは、アプリケーション層の情報をトランスポート層に配置し、アプリケーションレベルの懸念事項(アプリケーションが新しいチャットルームを作成する)をトランスポートレベルの懸念事項(ファイアウォールで新しいポートを開く必要がある)にプッシュします。

さらに、ポートはパケットヘッダーの16ビットフィールドにすぎません。アプリケーションのメッセージの設計でも同じことができます。各メッセージの先頭にルームIDとユーザーIDを配置し、サーバーにすべてを整理してもらいます。

これについて私を悩ませているのは、クライアントが更新を要求したときに、何を送信する必要があるかを理解することです。素朴な解決策は、部屋の各ユーザーのバッファーを保持し、ユーザー状態の一部として各(他の)ユーザーのバッファーへのインデックスを維持することです。そうすれば、ユーザーAが更新を要求すると、サーバーは、ユーザーB、C、およびDがAの最後の要求以降に入力したすべてのものを送信できます。これにより、メモリ使用量と永続性に関するあらゆる種類の問題が発生しますが、明確な単純な解決策はありません。

ここで説明した問題に対する正しい答えは、要件によって異なります。これらの要件が非常に詳細に定義されていることを確認してください。「キーストロークをまとめてバッチ処理する必要がありますか?」などの質問をしたくありません。あなたがこのことを構築している間。

于 2011-04-15T19:53:59.760 に答える