【问题标题】:Need simple data push to browser using node.js需要使用 node.js 将简单的数据推送到浏览器
【发布时间】:2010-11-07 14:31:42
【问题描述】:

在服务器端,我使用 node.js 做一些分布式异步乒乓球。我现在需要在客户端浏览器中将结果显示为实时图表。为简单起见,我目前使用基于图像的 Google 图表 URL 并限制要绘制的数据量。最终,这个客户端显示部分将变得丰富且具有交互性。

我了解我的服务器将数据推送到浏览器的方法之一是 Comet。我希望浏览器端必须有一个相应的socket-something,所以两者应该一起去。

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

Q2:对于生产:对跨浏览器(包括移动设备)工作的方法有什么建议吗?每秒 100KB 的二进制更新顺序,没有图像或视频。

【问题讨论】:

    标签: javascript node.js


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢,看起来很完美。
    【解决方案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 的 index.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>
    

    【讨论】:

      猜你喜欢
      • 2021-07-12
      • 1970-01-01
      • 2013-09-05
      • 1970-01-01
      • 2015-09-15
      • 1970-01-01
      • 1970-01-01
      • 2010-12-29
      • 2020-01-14
      相关资源
      最近更新 更多