Nodeの基本http.request()
機能は普通のHTTPサーバーで問題なく使えています。http.request()
SHOUTcastサーバーで使用する(または同様の)必要があります。SHOUTcast の「プロトコル」は HTTP と完全に互換性がありますが、1 つの詳細を除きます...最初の応答行です。
通常の HTTP サーバーは次のように応答します。
HTTP/1.1 200 OK
SHOUTcast サーバーは次のように応答します。
ICY 200 OK
ここでも、プロトコルの残りの部分は同じです。唯一の違いはHTTP/1.x
対ICY
です。
Node の関数を拡張、サブクラス化、またはなんらかの方法で変更http.request()
して、SHOUTcast サーバーで動作できるようにしたいと考えています。Node を使用した SHOUTcast への接続は、以前にも行われていましたが、車輪全体を再発明することによってのみ行われました。プロトコルの小さな違いに相当するもののために、私はむしろそれをしたくありません。
私の質問: 次のいずれかを行う方法はありますか?
Node の HTTP パーサーの関連部分を拡張またはオーバーライドします。(パーサーがネイティブ コードのように見えるため、これが可能であるとは思えません。)
HTTP の関連部分を解析する独自のコードを作成しますが、HTTP の既存の Node コンポーネントをできるだけ多く再利用します。
Node の HTTP パーサーに到達する前に最初のサーバー応答行を変更できるように、単純な内部プロキシ (または何らかの方法でデータを中継) を作成します。
他の何か?
Shredの使用も検討しましたが、応答をストリーミングするオプションはありません。(イベントを発生させる前にサーバーの応答全体が完了するのを待ちます。これは、データが無期限に実行されるストリーミング サーバーでは機能しません。) 同じ方針でRequestを試しましたが、Node 独自の HTTP パーサーを使用しているため、ネイティブ HTTP クライアントの場合と同じ解析エラーが発生します。