【发布时间】:2011-02-03 06:08:18
【问题描述】:
我想知道是否可以使用 Node.js 将数据从服务器流式传输到客户端。我想向 Node.js 发布一个 AJAX 请求,然后保持连接打开并不断将数据流式传输到客户端。客户端会收到这个流并不断更新页面。
更新:
作为this answer 的更新 - 我无法让它工作。在您致电close 之前,不会发送response.write。我已经设置了一个示例程序,用于实现此目的:
Node.js:
var sys = require('sys'),
http = require('http');
http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/html'});
var currentTime = new Date();
setInterval(function(){
res.write(
currentTime.getHours()
+ ':' +
currentTime.getMinutes()
+ ':' +
currentTime.getSeconds()
);
},1000);
}).listen(8000);
HTML:
<html>
<head>
<title>Testnode</title>
</head>
<body>
<!-- This fields needs to be updated -->
Server time: <span id="time"> </span>
<!-- import jQuery from google -->
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
<!-- import jQuery -->
<script type="text/javascript">
$(document).ready(function(){
// I call here node.localhost nginx ports this to port 8000
$('#time').load('http://node.localhost');
});
</script>
</body>
</html>
使用这种方法,在我致电close() 之前,我不会得到任何回报。这是可能的吗,还是我应该采用长轮询方法,而不是在一个进来时再次调用加载函数?
【问题讨论】:
-
另外我不认为这是流媒体,这只是将内容分块。是的,节点会发送部分答案,但每个 html 服务器都会这样做。您从节点获得的流媒体优势指的是其他东西。
-
另外,在您的示例中,您没有 pause、resume、flush 方法。 (读取)流是为您提供数据的东西,尽可能快(或尽可能快)。你告诉它暂停,然后它就暂停了。你告诉它继续等等。
标签: jquery html ajax node.js data-stream