需要使用 node.js 将简单的数据推送到浏览器

Need simple data push to browser using node.js

提问人:user402476 提问时间:11/2/2010 最后编辑:Brian Driscolluser402476 更新时间:11/7/2010 访问量:14046

问:

在服务器端,我使用 node.js 来做一些分布式异步乒乓球。我现在需要在客户端浏览器中以实时图表的形式显示结果。为了简单起见,我目前正在使用基于图像的 Google 图表 URL,并限制要绘制的数据量。最终,这个客户端展示作品将是丰富和互动的。

我知道我的服务器将数据推送到浏览器的方法之一是 Comet。我希望浏览器端必须有一个相应的套接字,所以两者应该一起进行。

Q1:对于原型设计:将字符串数据从 node.js 推送到我的 Firefox 3.6.10 浏览器的最简单方法是什么?字符串每秒更新一次小于 1KB 的字符串。

问题 2:对于生产环境:对于适用于浏览器(包括移动设备)的方法,您有什么建议吗?二进制更新顺序为每秒 100KB,没有图像或视频。

JavaScript 节点:.js

评论


答:

11赞 Robert 11/2/2010 #1

我真的建议看看 Node.js 的 http://socket.io/。它适用于移动设备,并支持多种方法,利用浏览器可用的最佳选项,实现您想要的彗星效果。

它也非常简单,虽然它确实缺少通道,但它是一种简单的解决方法socket.broadcast(msg, [array containing every user except those 'subscribed'])

7赞 user402476 11/7/2010 #2

每两秒服务器在 [0,100] 中生成一个随机数 r1,然后向客户端发送消息以绘制一个饼图,其中 r1 和 r2=100-r1。尚未实现为多个客户端建议的广播。欢迎提出任何其他改进建议。

服务器端(在 coffeescript 中):

http = require('http')
io = require('socket.io')

server = http.createServer( )

server.listen(8000)

socket = io.listen(server)

myrand = (client) -> setInterval( -> 
    r1 = Math.floor(Math.random()*101)
    r2 = 100-r1
    client.send(String(r1) + ',' + String(r2))
, 2000)

socket.on('connection', (client) -> myrand(client))

客户端(带有 javascript 的索引 .html):

<h1>My socket client</h1>

<script src="http://cdn.socket.io/stable/socket.io.js"></script>

<div id="piechart">
Hello World
</div>

<script>
socket = new io.Socket('localhost:8000');
socket.connect();
socket.on('message', function(data){
    url = 'http://chart.apis.google.com/chart?cht=p3&chs=250x100&chd=t:' + data + '&chl=Hello|World';  
    document.getElementById('piechart').innerHTML = "<img src="+ url + "></img>";
});
</script>