2011-01-22 8 views
1

私は、ストリーミングサーバIは、ソケットAPIで作成されたサーバソケットを使用して、ポート80で要求をhttpにリッスンCプログラムを持っているポート81ソケットをバイパスする方法は?

上で動作する「Lighttpdの」(光-TPD)がインストールされています。

私はクライアントからポート80でリクエストを受け取るとすぐにストリーミングサーバーに転送し、残りの会話はストリーミングサーバーとクライアント&で実行され、Cプログラムを完全にバイパスします。

クライアントは、ポート80のソケット(つまり、Cプログラムのソケット)から、ポート81でサービスを提供するストリーミングサーバからではなく、ポート80だけに要求を送信したので、クライアントからのメッセージを期待しています。 クライアントに返信するためにポート80上のソケットをバイパスするというこの問題に関して誰も助けてくれますか?

解決方法私のプログラムは中間者になる可能性があります...ストリーミングサーバーのポート81に要求を転送し、そこから応答を受け取ったときにクライアントに転送しますが、バイパスは効率的です私はそれをする方法を知らない。私を助けてください。事前

答えて

0

おかげで私は最近、単一のプログラムは、TCP接続を受け入れ、その後、別のコンポーネントにその接続「を渡し」とソケットの会話には更なる役割を果たしていない同様の手法を実装しています。これは、受け入れられたソケットのファイル記述子をUNIXソケット経由でサーバコンポーネントに渡すというテクニックを使用します。サーバコンポーネントは、fdの実質的にインタープロセスdup()を実行します。

hereおよびhereを参照してください。

この私は、サーバー側でのUNIXソケットの両端のコントロールを持っていると私のために動作しますが、あなたのために働くために、あなたが必要があるだろう:

  1. あなたの派遣成分とA UNIXソケットとサーバーコンポーネント。
  2. サーバーコンポーネントのフルコントロール。

あなたはlighttpdソースコードをハックする必要があるかもしれません...

申し訳ありませんが、本当に適切な答え...

1

なぜ前のあなたのCプログラムを置きますか? Lighttpdはフロントエンドプロキシとして機能するように設計されているので、lighttpdを前面に置き、mod_proxy_coreを使用してリクエストをCプログラムに渡すことができます。 X-Rewriteおよび/またはX-Sendfileを使用して、アプリケーション内で何らかの処理を行った後にLighttpdに要求を戻すことができます。

関連する問題