Socketio通信间隔太长

时间:2018-10-10 15:12:33

标签: javascript node.js socket.io

我的SocketIO服务器每秒返回10到0的计数,但是我的网页仅每10-15秒更新一次该计数。但是,我的NodeJS控制台很好地显示了此计数。

此外,当我手动重新加载网页时,浏览器会显示正确的数字,但突然我必须等待10-15秒才能显示下一位。

NodeJS部分

<div class="container">
  <div class="row">
    <div class="row-item sc-left">
      3456789
    </div>
    <div class="row-item">
      Test Test Test Test Test
    </div>
    <div class="row-item sc-left">
      10/12/73
    </div>
<!--     <div class="row-item row-item-bar">
      <div class="bar"></div>
    </div> -->
   
  </div>
</div>

<div class="container">
  <div class="row">
    <div class="row-item sc-left">
      3456789
    </div>
    <div class="row-item">
      Test Test Test Test Test
    </div>
    <div class="row-item sc-left">
      10/12/73
    </div>
    <div class="row-item row-item-bar">
      <div class="bar"></div>
    </div>
   
  </div>
</div>

HTML / JS部分

var http = require('http');
var fs = require('fs');
require('events').EventEmitter.prototype._maxListeners = 100;



var server = http.createServer(function(req, res) {
    fs.readFile('./serv.html', 'utf-8', function(error, content) {
        res.writeHead(200, {"Content-Type": "text/html"});
        res.end(content);
    });
});
function envoi(p1){
    var io = require('socket.io').listen(server);
    io.sockets.on('connection', function (socket) {
        socket.emit('message', p1);
    });
}
main();
function main(){
    var interval = setInterval(loop, 1000);
    var a = 10;
    function loop(){
        if(a<1){
            clearInterval(interval);
            rolling();
        }
        else{
            console.log(a);
            a--;
            envoi(a);
        }
    }
}
function rolling(){
    console.log('ok');
    main();
}
server.listen(8080);

谢谢:) 内森

1 个答案:

答案 0 :(得分:0)

您的服务器端socket.io代码存在一些问题,可能会引起问题。

您的envoi函数将在每次循环执行中创建一个新的socket.io服务器。它可能返回一个缓存的版本,但是,您应该只调用一次listen。与创建http服务器的操作类似。理想情况下,它应该遵循http服务器的创建。

以同样的方式,您应该只在听完呼叫后注册一次连接事件。然后,您应该将连接的套接字存储在某个位置,或者使用io.socket属性来检索连接的套接字。

您打印出数字的代码应如下所示

let val = 10;

function pushNumber() {
    io.sockets.emit('message', val); // Sends message to all sockets on default namespace

    val--;
}