将套接字数据从一个用户会话传递到另一个非异步的

时间:2017-04-26 23:36:21

标签: javascript node.js socket.io

我正在使用node.js和套接字,并且需要从一个房间中的一个套接字获取数据,然后当一个新套接字加入一个房间时将该数据分享给新会话。

更具体地说,我试图在房间的第一个插座上启动客户端的计时器,然后将当前计时器位置传递到加入房间的下一个插座。

我在客户端使用这样的基本计时器:

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开始。所以现在我有两个计时器而不是一个。

是否可以仅抓取当前的计时器位置并将其从服务器传递到新的房间连接非异步?或者如果这是用错误的方式来表达我的问题,请建议一个更好的方法,我会更新我的标题。

1 个答案:

答案 0 :(得分:1)

很抱歉这么说,但看起来在代码执行您所描述的内容之前还有很长的路要走。

服务器不会将计时器转发给其他客户端。

socket.on('clientTimer', function(seconds){
   socket.emit('newClientTimer', seconds);
});

您需要将其发送到其他套接字。我也不能发布一个“固定”的代码片段,因为你不清楚如何跟踪连接到房间里其他客户端的套接字。

此代码将计时器发送回收到它的同一个套接字。

每个新客户端从0开始,因为它使用相同的页面,用

初始化
var seconds = 0;

也许您正尝试使用

在客户端上接收计时器值
socket.on('newClientTimer', function(seconds){
  console.log(seconds);
});

但它不起作用,因为名为seconds的参数是它自己的变量,并且它不会更新外部作用域中的var seconds变量。因为参数的名称会将变量隐藏在外部,所以现在你甚至无法从一个变量到另一个变量。

你可能想要像

这样的东西
socket.on('newClientTimer', function(newSeconds){
  console.log(newSeconds);
  seconds = newSeconds;
});