2012-04-02 12 views
1

HTTPに基づいたプロトコル(Icecast Source Protocol)をサポートするには、HTTPリクエストが送信されたNode.jsのhttp.Serverからソケットを使用できるようにする必要があります。終了しました。サンプルの要求は次のようになります。Node.jsサーバへのHTTPリクエスト/レスポンス後にソケットを開いたままにする

Client->Server: GET/HTTP/1.0 
Client->Server: Some-Headers:header_value 
Client->Server: 
Server->Client: HTTP/1.0 200 OK 
Server->Client: 
Client->Server: <insert stream of binary data here> 

これはインターネットラジオストリームのソースをサポートするためのものです。ストリームデータのソースはこの場合クライアントです。

Node.jsのhttp.Serverに組み込まれている方法はありますか?私はポート1337にtelnetし、要求を行った場合、私は、サーバーのコンソールウィンドウに入力する内容の最初のカップルの文字を見ることができていますが、その後、サーバは接続を閉じ

this.server = http.createServer(function (req, res) { 
    console.log('connection!'); 
    res.writeHead(200, {test: 'woot!'}); 
    res.write('test'); 
    res.write('test2'); 
    req.connection.on('data', function (data) { 
     console.log(data); 
    }); 
}).listen(1337, '127.0.0.1'); 

:私はこれを試してみました。理想的には、私はそのソケットを無期限に開いたままにして、最初のリクエストが行われたらループからHTTP部分を取り除きます。

これは株式http.Serverクラスで可能ですか?

答えて

0

この問題に対する私の解決策は、ホイールを再開発し、自分のHTTP-ishサーバーを作成することでした。完璧ではありませんが、機能します。うまくいけば、これらのストックNode.jsクラスのいくつかの内部がいつか公開されることになります。

0

プロトコルバージョンとしてHTTP/1.0を報告しているため、サーバーが接続を切断している可能性があります。あなたのクライアントが管理しているものであれば、キープアライブヘッダー(Connection: Keep-Aliveが私の思う通りです)を設定してみてください。

0

私は似たような状況で、ここで私はそれが動作するようになった方法ですした

http.createServer(function(res, req){ 

// Prepare the response headers 

res.writeHead(200); 

// Flush the headers to socket 

res._send(''); 

// Inform http.serverResponse instance that we've sent the headers 

res._headerSent = true; 

}).listen(1234); 

ソケットは今)(無http.serverResponse.endとして、開いたままになりますと呼ばれてきたが、ヘッダは持っていますフラッシュされました。

あなたは(あなたがIcecastのソース接続のために必要がありますないこと)の応答データを送信したい場合は、単に:接続を終了する場合

res.write(buffer_or_string); 
res._send(''); 

だけres.end()を呼び出します。

私はこの方法を使用してMP3データを正常にストリーミングしましたが、ストレス下ではそれをテストしていません。

関連する問題