Node.js不更新客户端

Node.js不更新客户端,node.js,socket.io,Node.js,Socket.io,我有一个场景,其中节点通过net.socket连接从一台服务器提取数据,然后使用sockets.io输出到客户端浏览器。来自服务器的数据几乎每分钟更新一次。如果我将数据输出到控制台,它工作正常,在更新发生时显示更新。然而,我似乎无法通过socket.io将数据推送到浏览器。我擅长PHP,但对javascript完全是新手。但我明白,当数据从服务器更新时,它应该触发一个“事件”,导致socket.io将新数据推出。我非常感谢你的帮助 //set all variables and modules

我有一个场景,其中节点通过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});
      });
     }
   });

您没有调用clientupdate函数。你申报但不打电话。 您所需要的只是:

clientupdate();

该代码有几个问题:

  • 从不调用
    clientUpdate
    函数,因此服务器根本不响应新客户端
  • 即使您确实调用了该函数,按照您现在的实现方式,服务器也只会发送连接后接收到的第一组数据,而不会发送任何后续结果。要解决此问题,您可以在
    io
    对象上发出消息,这将向所有连接的客户端发送消息
  • 结合起来,这看起来像这样(未经测试,但应该可以):


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

    客户端代码在哪里?我不关心客户端,因为我可以通过socket.io毫无问题地连接。问题是从服务器提取的数据(“调用”)没有传递到socket.io“socket.emit('calls',{data:calls});”以推送到客户端。不知道我错过了什么。var socket=io.connect(');on('calls',function(data){setStatus('connected');console.log(data);});socket.on('重新连接',函数(数据){setStatus('重新连接';});}好吧,在我有限的javascript经验中,这是有意义的。应该调用它来代替“console.log(data)”吗?我认为我的部分问题(除其他问题外)是围绕着整个异步问题。
     //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 });
      });