Javascript Express JS on connection中的Socket.io执行多次
我指的是integratedsocket.io 我想要实现的是,在服务器端运行一个倒计时计时器,它每秒向客户端发送一次Javascript Express JS on connection中的Socket.io执行多次,javascript,node.js,express,socket.io,Javascript,Node.js,Express,Socket.io,我指的是integratedsocket.io 我想要实现的是,在服务器端运行一个倒计时计时器,它每秒向客户端发送一次setInterval。我得到的结果是 那里的终端在。('connection')上,我第一次刷新页面时,它在。('connection')上执行了4次,倒计时正常。然后我第二次刷新,它在('connection')上执行了8次,倒计时计时器也有2个值。然后继续。。。。12次,16次 在app.js中 app.use(function(req, res, next){ re
setInterval
。我得到的结果是
那里的终端在。('connection')上,我第一次刷新页面时,它在。('connection')上执行了4次,倒计时正常。然后我第二次刷新,它在('connection')
上执行了8次,倒计时计时器也有2个值。然后继续。。。。12次,16次
在app.js中
app.use(function(req, res, next){
res.io = io;
io.on('connection', function(socket) {
console.log(socket.id + ' connected.');
});
next();
});
router.get('/', function(req, res, next) {
models.User.findAll({
include: [ {model: models.Task, as: 'tasks'} ]
}).then(function(users) {
var eventTime= new Date('2017-03-31 13:00:00').getTime();
var currentTime = new Date().getTime();
var diffTime = eventTime - currentTime;
var duration = moment.duration(diffTime*1000, 'milliseconds');
var interval = 1000;
setInterval(function() {
duration = moment.duration(duration - interval, 'milliseconds');
res.io.emit('countdown', { time_left: duration.hours() + ":" + duration.minutes() + ":" + duration.seconds() });
}, interval);
res.render('users', {
title: 'Sequelize: Express Example',
users: users
});
});
});
在routes/users.js中
app.use(function(req, res, next){
res.io = io;
io.on('connection', function(socket) {
console.log(socket.id + ' connected.');
});
next();
});
router.get('/', function(req, res, next) {
models.User.findAll({
include: [ {model: models.Task, as: 'tasks'} ]
}).then(function(users) {
var eventTime= new Date('2017-03-31 13:00:00').getTime();
var currentTime = new Date().getTime();
var diffTime = eventTime - currentTime;
var duration = moment.duration(diffTime*1000, 'milliseconds');
var interval = 1000;
setInterval(function() {
duration = moment.duration(duration - interval, 'milliseconds');
res.io.emit('countdown', { time_left: duration.hours() + ":" + duration.minutes() + ":" + duration.seconds() });
}, interval);
res.render('users', {
title: 'Sequelize: Express Example',
users: users
});
});
});
这里有什么问题吗?我想您可能将io.on('connection')
事件保持在设置间隔内。这就是为什么它每次都在*2中进行复制
如果要实现倒计时,可以这样做:
io.on('connection', function (socket){
var tick = 0;
setInterval(function(){
socket.emit('timer', tick++)
}, 1000);
})
现在,您可以在前端收听计时器事件并显示结果。
谢谢我想您可能将io.on('connection')
事件保持在设置间隔内。这就是为什么它每次都在*2中进行复制
如果要实现倒计时,可以这样做:
io.on('connection', function (socket){
var tick = 0;
setInterval(function(){
socket.emit('timer', tick++)
}, 1000);
})
现在,您可以在前端收听计时器事件并显示结果。
谢谢我找到了答案
io.on('connection',函数(socket){
socket.removeAllListeners();我找到了答案
io.on('connection',函数(socket){
socket.removeAllListeners();请解释您的问题?我想创建一个倒计时计时器,通常倒计时是由js在前端完成的。但我想在后端完成,因此我使用socket.io。当我在服务器端调试连接时(我放置console.log
)显示调试消息。它显示4次相同的消息,当我刷新浏览器时,显示8次,然后是12次,16次,等等。请解释您的问题?我想创建一个倒计时计时器,通常倒计时由js在前端完成。但我想在后端完成,因此我使用socket.io。当我在服务器端调试连接时(我放置console.log
)以显示调试消息。它显示4次相同的消息,当我刷新浏览器时,显示8次,然后是12次、16次,等等。如果我的问题不清楚,请担心。现在我为我的问题添加更多代码。如果我的问题不清楚,请感谢。现在我为我的问题添加更多代码。谢谢