我正在尝试创建一个发送事件流的服务器。我已经创建了一个可读流,我试图将其推送到响应按键,这样我就可以控制事件流发送到客户端。
var Readable = require('stream').Readable
var rs = new Readable()
var server = http.createServer(function(req, res) {
rs.pipe(res)
})
server.listen(8888)
keypress(process.stdin)
process.stdin.on('keypress', function (ch, key) {
if( key && key.name === 'up' ) {
rs.push('up key')
}
}
当我按向上键时,我得到这个:
events.js:85
throw er; // Unhandled 'error' event
^ Error: not implemented
at Readable._read (_stream_readable.js:464:22)
at Readable.read (_stream_readable.js:341:10)
at maybeReadMore_ (_stream_readable.js:449:12)
at _stream_readable.js:439:7
at process._tickCallback (node.js:355:11)
我甚至不知道events.js是什么。这不是我的代码
我希望发生的是字符串up key
将从服务器流中发出。我做错了什么?
事实证明,我真正想要的是一个分块响应,它不预先声明响应的Content-Length。这允许节点服务器保持连接打开,定期写入。
var streamResponse
var server = http.createServer(function(req, response) {
response.setHeader('Content-Type', 'text/html; charset=UTF-8');
response.setHeader('Transfer-Encoding', 'chunked');
streamResponse = response
})
server.listen(44445)
setTimeout(function(){
streamResponse.write('this is a chunk');
}, 5000)
我相信Node默认使用块传输,但关键部分是调用response.write()而不是response.send()。当没有其他东西要发送时,可以调用response.end()。
注意:我可能有一些混淆在这里什么是Node和什么是Express。如果你遇到任何问题,可以从这里开始。