1

さて、これが私の状況です。私は最良の設計アプローチを探しています。サーバー側では PHP/Smarty、クライアント側では HTML/jQuery を使用していますが、ここではそれほど重要ではありません。

サーバーにこのマルチユーザーシステムがあります。一種の注文システムです。標準ユーザー (顧客と呼びましょう) は、Web ショップからいくつかのアイテムを注文できます。Web ショップには、複数の販売者の商品が含まれています。

ユーザー (顧客) が注文すると、システム内のユーザーでもある販売者は、新しい注文があることを通知され、確認/拒否する必要があります。

売り手が注文を確認/拒否すると、注文のステータスを示す通知がユーザーに送信される必要があります。

注文は、注文確認と同様にデータベースに保存されます。

私が今思いつく唯一の方法は、常に (AJAX を使用して短い間隔で) 売り手の画面からデータベース内の新しいレコードをチェックし、顧客が待っているときに同じことを行うことです。確認。

しかし、ユーザー(顧客)が注文したときに売り手に通知をトリガーして、売り手が必要なときにのみデータベースをロードできるようにする方法はありますか?

顧客が確認を待っている場合も同様です。しかし、それは常に起こるわけではないので、それほど重要ではありません。販売者が応答しない場合、注文は自動的に拒否されます。

私の質問を理解していただければ幸いです。

4

3 に答える 3

1

ここでのPHP での Comet の使用に関する同様の質問に対する回答は、Apache スレッドがクライアントへのすべての開いている接続から拘束されていることに問題がある可能性があることを示唆しています。

PHP Continuationsに関するこのブログ投稿によると、 PHPで継続を使用することは可能ですが、このテーマに関するドキュメントはそれほど多くないようです。しかし、CometChat は PHP でそれを行いました。彼らが継続を使用しているかどうかは明らかではありませんが、100,000 接続まで拡張できると主張しています。PHP Comet の詳細については、A Solution for Comet and PHPに関する同様の Stack Overflow Question を参照してください。

また、Java を使用することを提案するつもりでした。Java には、スケーラブルな Comet with Continuation を実装する優れた実績があるからです。 Conversion Supportは、 Jetty Web サーバーでコメットと継続を使用するチャット ソフトウェアの例です。

コードは PHP であるため、Querces を使用して JVM で PHP コードを実行できます。さらに、Querces PHP Benchmarks Suggest it's Faster than Apacheにより、追加の利点が得られます。詳細については、Querces プロジェクトをご覧ください。

更新: Apache の方が高速であることを示唆する情報がある可能性があるため、独自のベンチマークを実行するか、速度の問題を自分で調査することをお勧めします。Querces を使用している場合は、基本的に、たまたま PHP のように見える Java を作成することになることを理解することが重要です。したがって、このアプローチの長所と短所を理解できるように、そこでも追加の調査を行うことをお勧めします。

于 2011-02-05T22:35:49.280 に答える
0

即時の更新は良いことですが、実際には、更新が即時に行われることはなく、インターネット経由でデータを転送する際に固有のある程度の遅延が常に発生します。

いくつかの理由から、ポーリング オプションの方が魅力的です。

あなたが説明するシステムは、最初は小規模かもしれませんが、マルチサーバー構成に簡単に拡張できるように聞こえます。ポーリングを使用すると、AJAX 要求が照会できるポーリング サーバーを作成できます。これは、AJAX の小さくて高速な性質に合わせて最適化できます。標準の Web サーバーは、通常の意味で Web ページの表示専用にすることができます。

ポーリングのアイデアは、REST スタイルの API にも適しているため、ポーリング領域はブラウザーから完全に独立しています。さらに先に進むと、システムの販売者がネイティブ アプリ、または iPhone/Android アプリを好むことがわかります。REST API を使用すると、HTTP 要求を作成できる任意のアプリからこれを実行できます。

本質的に、特定のテクノロジーに縛られることを回避し、将来の可能性を切り開きます。大量の作業が追加されることはなく、永続的な接続では不可能なレベルの柔軟性が提供されます。

于 2011-02-03T11:34:25.243 に答える
0

前述の COMET とロング ポーリングは、この問題の一般的な解決策です。ただし、HTML5 Web ソケットを調べることもできます。すべてのブラウザーでサポートされていますが、IE ブラウザー用のパッチ/ポリフィルがあります。

Node.js を見て、apache と一緒に実行することもできます。

于 2011-02-03T11:42:18.237 に答える