【问题标题】:Isolate setInterval for each thread/user?为每个线程/用户隔离 setInterval?
【发布时间】:2015-03-19 08:08:59
【问题描述】:

我使用的是nodejs,我从php socket服务器切换到nodejs的原因之一是线程能力。 (本质上,我希望我的游戏服务器中的怪物自动攻击玩家)。

假设在我放置的节点的 sever.js 文件中:

setInterval(function(){
        console.log('Hello');
}, 1000);

然后我在一个浏览器上登录并验证我的角色,然后查看控制台,我可以看到每秒输出“Hello”。没关系,但随后我加载了一个新浏览器,验证了另一个用户,然后查看控制台。它实际上输出速度是原来的两倍,这不是正确的方法吗?

编辑:我正在使用https://github.com/websockets/ws,而 setInterval 函数就在

socket.on('message', function(Message, flags) {
~~~gameserver authentication /blah mysql blah ~~
setInterval(function(){
        console.log('Hello');
}, 1000);
})

希望对您有所帮助,抱歉不够具体。

【问题讨论】:

  • Let's say in my sever.js file for node - 这不是真的.. 将整个文件放入 (req, res) 功能。什么样的浏览器,为您的测试设置了什么。 编辑问题以提供更多信息
  • @Urahara 我已编辑,如果您需要其他任何内容,希望对 lmk 有所帮助

标签: javascript node.js


【解决方案1】:

您的脚本是为每个用户运行的(因为那是服务器)。当然,您可以收听并向特定用户发出声音。您需要为每个生成一个发射器,或者以仅将数据发送到所需客户端的方式编写发射器。

这可能会对您有所帮助:socket.io and node.js to send message to particular client

评论后编辑

不,脚本将为每个用户运行,因此您为每个用户启动一个间隔。如果你只想开始一个,你可以:

  1. Name your interval and if it is defined not start it again.
  2. Start the interval on a separate script that you run from console or something like that and it is never accessed by clients.

【讨论】:

  • 是的,我已经可以向服务器上的特定客户端发送数据了。我将它们存储在临时用户对象中。但是,setInterval 函数似乎是在每个新连接上添加的。 TLDR:是否可以为特定对象(或用户)设置 setInterval 函数,因此它仅在该用户已连接且不会与其他 setInterval 重叠时运行(即它加速且不正确时)?将其视为添加 addEventListener setInterval 但添加到 Object O_O Hmmmm 中的特定 ID .....
  • 好的,阅读您的编辑。话虽如此,我可以将我的 setIntervals 分配给当前的动态变量(不同的用户有差异 ID,都是唯一的)?然后我可以将该 setInterval 分配给他们的对象 ID 对吗?如果是这样,我会在 2 分钟内将你标记为答案。
  • 是的,你可以,但现在我在想你是否可以从另一个客户端运行的脚本访问在客户端定义的特定变量......(需要检查这个并且不能这样做直到格林威治标准时间 18:00 + 2 -> 我在工作 atm :) )。
  • 成功了吗?如果是,就不需要再在家检查了:)。
  • 我的荣幸。那就玩得开心。
猜你喜欢
  • 1970-01-01
  • 2019-05-23
  • 1970-01-01
  • 2023-02-09
  • 1970-01-01
  • 2023-03-07
  • 2015-03-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多