2010-11-02 65 views
10

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

据我所知,我的服务器将数据推送到浏览器的方式之一是Comet。我期望在浏览器端必须有一个相应的套接字,所以两者应该结合在一起。

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

问题2:对于生产:对于可以跨浏览器(包括移动设备)工作的方法的任何建议?二进制更新顺序为每秒100KB,无图像或视频。

回答

10

我真的建议看看Node.js的http://socket.io/。它可以在移动设备上运行,并且支持您希望的Comet效果的多种方法,并利用浏览器可用的最佳选项。

这很死的简单过,虽然它缺乏渠道,但它的使用socket.broadcast(msg, [array containing every user except those 'subscribed'])

+0

谢谢,这看起来很完美。 – user402476 2010-11-02 16:20:38

+2

我得到它的工作。请参阅下面的代码。 – user402476 2010-11-07 06:19:39

7

每两秒服务器[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)) 

客户端(index.html的使用javascript):

<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> 
相关问题