1

我有一个场景,我让 Node 通过 net.socket 连接从一台服务器提取数据,然后使用 sockets.io 输出到客户端浏览器。来自服务器的数据大约每分钟更新一次。如果我将该数据输出到控制台,它可以正常工作,并在发生更新时显示更新。但是,我似乎无法通过 socket.io 将该数据推送到浏览器。我很擅长 PHP,但完全是 javascript 的新手。我确实明白,随着数据从服务器更新,它应该触发一个“事件”,导致 socket.io 推出新数据。我会很感激任何帮助。

 //set all variables and modules includes here
 // [...]

  server = http.createServer (function(req, res) {
     res.writeHead(200, {'Content-Type:' 'text/html'});
     res.end(index);
  }).listen(8080, localhost);

  //connection to stats server
  var socket = new net.Socket();
    socket.connect (6000, "xxx.xxx.xxx.xxx", function () {
    console.log("connected");
  });
    socket.on('data', function(data) {
      var buf = new Buffer(data, 'base64');
      var calls = buf.toString();
      console.log(calls); // if I include this, data outputs to console perfectly

   //set up socket.io connection to client
   var clientupdate = function clientupdate() {
      io.sockets.on('connection', function(socket) {
         socket.emit('calls', {data: calls});
      });
     }
   });
4

2 回答 2

0

您没有调用 clientupdate 函数。你声明它,但你不打电话。所有你需要的是:

clientupdate();
于 2013-06-17T14:30:13.410 回答
0

代码有几个问题:

  1. clientUpdate函数永远不会被调用,因此服务器根本不会响应新客户端。
  2. 即使您确实调用了该函数,您现在实现它的方式服务器也只会发送连接后收到的第一组数据,而不会发送任何后续结果。要解决此问题,您可以io改为在对象上发出消息,这会将消息发送到所有连接的客户端。

结合起来看起来像这样(未经测试,但它应该可以工作):

 //set all variables and modules includes here
 // [...]

  server = http.createServer (function(req, res) {
     res.writeHead(200, {'Content-Type:' 'text/html'});
     res.end(index);
  }).listen(8080, localhost);

  //connection to stats server
  var socket = new net.Socket();
    socket.connect (6000, "xxx.xxx.xxx.xxx", function () {
    console.log("connected");
  });

  socket.on('data', function(data) {
    var buf = new Buffer(data, 'base64');
    var calls = buf.toString();
    console.log(calls); 

    //any data we have we emit to all the clients
    io.emit('calls', { data : calls });
  }); 

请注意,由于从未使用过单独的连接,因此我省略了整个io.on('connection')部分。仅当您需要与单个客户交互时才需要它。

于 2015-05-12T21:47:21.227 回答