【问题标题】:NodeJS - long polling/pushing/rejeverse ajax? What do i need to push live data isntantly to the web?NodeJS - 长轮询/推送/反向ajax?我需要什么才能将实时数据即时推送到网络上?
【发布时间】:2012-11-11 06:36:09
【问题描述】:

我对 NodeJS(使用 c9.io)还很陌生,最近对它有这种病态的痴迷。

我想知道在使用 NodeJS 时。是否可以流式传输基本 html 页面的内容,不是很大,也不是很特殊,比如 10 个并发用户。但是,如果该 html 页面发生更改,用户将立即看到更改。这可以基于任何事件,但基本上基于正在更新的文件内容。我真的希望创建一些简单的原型来给老板留下深刻印象,并使用 NodeJS 来实现,希望能够摆脱我们当前对 setInterval ajax 帖子的过时使用。呕吐

  1. 这个过程叫什么名字,因为我经常听到不同的名字。
  2. 有可能吗?
  3. 除了 NodeJS 我还需要什么
  4. 哪里是一个好的起点?

谢谢

【问题讨论】:

    标签: node.js push long-polling requirements


    【解决方案1】:

    好的,这是一个非常简单的例子。 文本区域与登录成员同步。

    请安装http、socket.io和express(ver3)。

    sudo npm install http, socket.io, express
    

    并创建一个 javascript 文件。

    server.js

    var app = require('express')(), 
      server = require('http').createServer(app), 
      io = require('socket.io').listen(server),
      member_sockets = {},
      key;
    
    server.listen(80);
    
    app.get('/', function (req, res) {
      res.sendfile(__dirname + '/index.html');
    });
    
    io.sockets.on('connection', function (socket) {
      var user_id = socket.id;
    
      member_sockets[user_id] = socket;
      console.log("[login]-->", user_id);
    
      socket.on('txt_change', function (data) {
        for (key in member_sockets) {
          if (key != user_id) {
            member_sockets[key].emit("txt_change", data);
          }
        };
      });
    
    
      socket.on('disconnect', function (socket) {
        console.log("[logout]-->", user_id);
        delete member_sockets[user_id];
      });
    });
    

    在同一目录中,您还创建了一个 index.html 文件。

    index.html

    <!DOCTYPE html>
    <html>
      <head>
        <script src="http://code.jquery.com/jquery-1.8.2.min.js"></script>
        <script src="/socket.io/socket.io.js"></script>
        <script>
          var socket = io.connect('http://localhost');
          socket.on('txt_change', function (data) {
            console.log(data);
            $("#txt").val(data.txt);
          });
          $(document).ready(function(){
            $("#txt").keyup(function(){
              socket.emit('txt_change', { "txt" : $(this).val() });
            });
          });
        </script>
      </head>
      <body>
        <textarea id="txt" style="width:200px;height:100px"></textarea>
      </body>
    </html>
    

    然后使用以下命令运行服务器:

    sudo node server.js
    

    所以代码应该像这张图片一样工作:

    【讨论】:

    • 我没有检查 c9.io。我只在我的 Mac 上查看。
    • 我很高兴尝试这个。保持联系。在此先感谢,非常感谢您的故障。
    • (鞠躬)无法让它在我的本地主机(运行 mamp)上工作,但我让它在 c9.io 上工作得很好,谢谢!
    【解决方案2】:

    你检查过socket.io吗?您可以使用 socket.io 模块轻松创建推送服务器。

    http://socket.io/

    【讨论】:

    • 我的本地机器上都安装了 socket.io,它带有节点,它带有 c9。就需要添加程序而言,这就是全部吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-29
    • 1970-01-01
    • 2011-04-07
    • 1970-01-01
    • 1970-01-01
    • 2011-02-05
    • 1970-01-01
    相关资源
    最近更新 更多