Чтобы поддерживать протокол (исходный протокол Icecast), основанный на HTTP, мне нужно иметь возможность использовать сокет из 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? Я пробовал это:
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');
Если я подключаюсь через telnet к порту 1337 и делаю запрос, я могу видеть первые пару символов того, что я печатаю, в окне консоли сервера, но затем сервер закрывает соединение. В идеале я бы оставил этот сокет открытым на неопределенный срок и исключил часть HTTP из цикла после того, как будет сделан первоначальный запрос.
Возможно ли это со стандартным классом http.Server?