我正在使用 node.js 和套接字,并且需要从房间中的一个套接字获取数据,然后当新套接字加入房间时,将该数据共享到新 session 。
更具体地说,我尝试在客户端的房间中第一个套接字上启动计时器,然后将当前计时器位置传递给加入房间的下一个套接字。
我在客户端使用这样的基本计时器:
setInterval(timer, 1000);
var seconds = 0;
function timer(seconds){
socket.emit('clientTimer', seconds);
seconds++;
return seconds;
}
在服务器端,我正在监听计时器,然后我想将该计时器信息发送到加入房间的下一个套接字。
socket.on('clientTimer', function(seconds){
socket.emit('newClientTimer', seconds);
});
由于我对两个套接字使用相同的 js 文件,因此我在客户端有以下内容:
socket.on('newClientTimer', function(seconds){
console.log(seconds);
});
这里的问题是它只向原始客户端发送当前时间的计时器,而新客户端从 0 开始。所以现在我有两个计时器而不是一个。
是否可以仅获取当前计时器位置并将其从服务器非异步传递到新房间连接?或者,如果这是表达我的问题的错误方式,请提出更好的方法,我将更新我的标题。
最佳答案
很抱歉这么说,但在代码执行您所描述的操作之前,还有很长的路要走。
服务器不会将计时器转发给其他客户端。
socket.on('clientTimer', function(seconds){
socket.emit('newClientTimer', seconds);
});
您需要将其发送到其他套接字。我也无法发布“固定”代码片段,因为不清楚您如何跟踪连接到房间中其他客户端的套接字。
此代码将计时器发送回接收计时器的同一个套接字。
每个新客户端都从零开始,因为它使用相同的页面,该页面初始化为
var seconds = 0;
也许您正在尝试在客户端上接收计时器值
socket.on('newClientTimer', function(seconds){
console.log(seconds);
});
但它不起作用,因为名为 seconds
的参数是它自己的变量,并且它不会更新外部作用域中的 var Seconds
变量。因为参数的名称遮盖了外部变量,所以现在您甚至无法从一个变量分配给另一个变量。
你可能想要类似的东西
socket.on('newClientTimer', function(newSeconds){
console.log(newSeconds);
seconds = newSeconds;
});
关于javascript - 将套接字数据从一个用户 session 非异步传递到另一个用户 session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43646268/