繁体   English   中英

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

[英]Pass socket data from one user session to another non-asynchronously

我正在使用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开始重新启动。所以现在我有两个计时器,而不是一个。

是否可以仅获取当前计时器位置并将其非同步地从服务器传递到新的会议室连接? 或者,如果这是表达我的问题的错误方式,请提出一种更好的方式,我将更新标题。

不好意思地说,但是看起来代码要执行您描述的内容还有很长的路要走。

服务器不会将计时器中继到其他客户端。

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;
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM