Javascript 更改setInterval中的发射套接字
从另一个处于倒计时(setInterval)的浏览器/选项卡发出套接字时出现问题 我有以下脚本 这段代码让我能够理解所有在平台上连接的人 server.jsJavascript 更改setInterval中的发射套接字,javascript,node.js,socket.io,setinterval,Javascript,Node.js,Socket.io,Setinterval,从另一个处于倒计时(setInterval)的浏览器/选项卡发出套接字时出现问题 我有以下脚本 这段代码让我能够理解所有在平台上连接的人 server.js var nicks = new Array(); function usuarios(socket){ socket.emit('usuarios', {nicks: nicks}); socket.broadcast.emit('usuarios', {nicks: nicks}); } function nick(socket){
var nicks = new Array();
function usuarios(socket){
socket.emit('usuarios', {nicks: nicks});
socket.broadcast.emit('usuarios', {nicks: nicks});
}
function nick(socket){
socket.on('nick', function(data){
var nick = data.nick;
var variable = nicks.filter(function(hero) {
return hero.user == data.nick.user;
});
if(variable.length==0){ //Nuevo
nicks.push(nick);
socket.nick = nick;
socket.emit('nick', {correcto: true, nick: nick});
usuarios(socket);
}else{//Existe
socket.emit('nick', {update: true, nick: nick});
}
})
}
var timer;
function myTimer(reset) {
clearInterval(timer);
timer = setInterval(function() {
countdown--;
var nick = {user: actualuser, time: countdown};
socket.emit('nick', {nick: nick});
if (countdown == 3000) { //Reset count.
countdown=3600;
var nick= {user: data, time: countdown};
socket.emit('nick', {nick: nick});
}
} , 1000);
}
socket.on('nick', function(data){
});
front.js
var nicks = new Array();
function usuarios(socket){
socket.emit('usuarios', {nicks: nicks});
socket.broadcast.emit('usuarios', {nicks: nicks});
}
function nick(socket){
socket.on('nick', function(data){
var nick = data.nick;
var variable = nicks.filter(function(hero) {
return hero.user == data.nick.user;
});
if(variable.length==0){ //Nuevo
nicks.push(nick);
socket.nick = nick;
socket.emit('nick', {correcto: true, nick: nick});
usuarios(socket);
}else{//Existe
socket.emit('nick', {update: true, nick: nick});
}
})
}
var timer;
function myTimer(reset) {
clearInterval(timer);
timer = setInterval(function() {
countdown--;
var nick = {user: actualuser, time: countdown};
socket.emit('nick', {nick: nick});
if (countdown == 3000) { //Reset count.
countdown=3600;
var nick= {user: data, time: countdown};
socket.emit('nick', {nick: nick});
}
} , 1000);
}
socket.on('nick', function(data){
});
套接字将开始每1秒发出下一次计数
["nick",{"update":true,"nick":{"user":"1","time":3542}}]
所有这些都是可行的,但我现在遇到的问题是,如果一个人进入不同的浏览器,处理每个会话的倒计时不会重新启动,而是继续其过程。
范例
- Chrome标签1:倒计时=3450
- Chrome标签2:倒计时=3032
- Chrome标签3:倒计时=3978
当3000秒条件满足时,所有选项卡上的计数器都会重置我不明白您到底需要什么 如果希望所有用户都保持相同的时间,则需要将interval函数放入server node.js中,并在需要时发出计时器重置,当连接新用户时,只需向其发送实际的倒计时 您可以收听新用户连接到:
io.on('connection', function (socket) {
// where io = require('socket.io')(http),
})
是的,但是setinterval仅在浏览器会话中运行,并且以独占方式运行,如果我打开另一个选项卡或浏览器,它将运行完全不同的setinterval。我想做的是,如果用户进入的浏览器与当前浏览器不同,计数器将被全局重置(套接字)。每个连接的用户都有自己的计数器。