我的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);
谢谢:) 内森
答案 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--;
}