0

これは可能ですか?特定の要求に対する応答を提供するために http.sys によって使用される基になるソケットにアクセスできますか。ポート 80 で http プロトコルを介した全二重通信をサポートできるようにしたいと考えています。

現在のリクエストに対して確立されたソケットを取得し、それを全二重通信用に保持する方法はありますか?

私の使用例は Web ソケットです。Web ソケットのハンドシェイクは実際には有効な http 要求であり、アップグレードのために Web サーバーを再利用したいと考えています。クライアント マシンで別のポートが開かれていない可能性があるため、ポート 80 が不可欠です。

任意の代替案をいただければ幸いです。

4

1 に答える 1

0

http.sysを使用すると、基盤となるソケットにアクセスできません。httpリクエストを処理し、フラグメントから(フラグメントキャッシュ、メモリ、またはファイルから)応答を構築できます。使用するソケットを完全に制御する必要がある場合(httpリクエストとして開始し、「secret-websocket-handshake」がサポートされなくなった後で、後でWebSocketソケットにアップグレードします。

あなたができることは:全二重システムのようなロケットを使用することです。クライアントはHTTP1.1keep aliveソケットを使用してリクエストを投稿し、http.sysサーバーがそれらのリクエストを受信すると、サーバーからクライアントへのトリガーデータが利用可能になるか、タイムアウトが発生するまで回答を延期できます。これはWebSocketほど堅牢ではありませんが、適度にパフォーマンスが高く、サーバーの反応時間に1〜2ミリ秒しか追加されません(少なくとも私のテストでは)。唯一の問題は、誰かがサーバーに対してブラウザで複数のページを開いていて、ブラウザがページに単一のhttpリクエストを共有させ始めた場合に発生します。このため、最大ポーリングを可能な限り低く抑え、大幅に多くのWebトラフィックを生成しました。

もう1つのオプションは、「socket-code」でWebSocketを実行し、「http.sys-code」を使用してhttpリクエストを実行することでした。これもかなりうまく機能しますが、コードがより複雑になります。

于 2011-11-17T21:35:49.403 に答える