3

サーバーからクライアントのphpWebページに直接データをプッシュしようとしています。私はこの質問を何度もグーグルで検索しましたが、ajaxプッシュエンジンやcometDなどの他のものを使用したくありません(私が話していることを知っている場合)。接続されているすべてのクライアントにデータを送信するプログラムをサーバーに配置する方法があるかどうかを知りたいです。私はこれがcまたはc++またはc#で行われることを望みます、私はそれを自分でプログラムすることができます私はそれが可能であるならそしてどのようにそれをしたいだけです。

4

2 に答える 2

1

HTTP プロトコルがどのように機能しているかを理解していない可能性があります。最初にそれについてもっと自分自身を文書化する必要があります。あなたの場合にそれを使用する方法を説明しようとします:

  • ポーリング: X 秒ごとに、クライアントは必要なコンテンツを含む Web ページを要求します。これは、HTTP を使用する標準的な方法です。クライアントは GET を送信し、サーバーは応答を送信します。

  • プッシュ: 各クライアントは Web ページを要求しますが、サーバーは実際にはメッセージの送信を待ちます。この http チャネルを使用してデータを「プッシュ」できます。クライアントは GET を送信し、サーバーは送信する応答があるまで待ちます。

ご覧のとおり、私は言語の実装について話しているのではなく、HTTP プロトコルを逸脱して目的を実行する方法について話しているだけです。プッシュ アプローチの悪い点は、クライアントがアイドル状態の場合でも、X クライアントに対して X ソケットを開くことです。プル アプローチでは発生しません。応答が送信されると、ソケットは閉じられます。

これを行うには、クライアントから接続を開始する必要があります。これは、「Ajax」部分が役立つ場所です。jquery で見てみましょう。

$.get('/wait_for_message', function(data) {
    alert('My server send:' + data);
})

サーバーはGET /wait_for_message HTTP/1.1リクエストを受け取ります。データを送り返す代わりに、このソケットを「何かを待機しているクライアント」のリストに保存できます。次に、必要に応じて、このリストを反復処理し、すべてのソケットにデータを書き込むことができます。これにより、すべてのクライアントがデータを受信します。

現在、このメカニズムを正しく理解するのは簡単ではありません。これが、他の人々が提案したように、別のプロジェクトを使用できる理由です。

于 2012-02-11T00:54:08.107 に答える
0

実際のリクエストが何であるかを無視しても、データベースからデータをフォーマットして提供するために、任意の言語で非常に単純な Web サーバーを記述/変更できます。ヘッダーとデータをソケットに書き込むだけです。いくつかのリストに従って積極的に接続を開始することで、同じことを行うことができます。

于 2012-02-11T01:03:58.517 に答える