【问题标题】:How do you stop client-side Socket.io from looping socket emissions?如何阻止客户端 Socket.io 循环套接字发射?
【发布时间】:2015-10-28 23:41:15
【问题描述】:

假设我有一个名为“add”的 socket.io 事件,它接受 0 个参数,当在服务器端接收到时,增加一个计数变量,然后将新的计数值发送给每个客户端。如何阻止人们从本质上打开 JS 控制台并使用如下循环:

for(var i = 0; i < 1000; i++) {
    socket.emit('add');
}

另一个可能更有意义的场景是:我如何检测聊天应用程序中的泛滥?

我完全理解,没有什么可以真正确保客户端代码不被用户操纵。

如何为每个客户端的每个 socketio 事件处理程序添加某种形式的超时?

【问题讨论】:

  • @Xodrow 我已经看到了,这是为了限制发送到服务器的实际数据。我认为这根本不是超时。这是一个 mb/s 油门。我正在寻找某种形式的套接字发出事件处理程序,它检查来自同一个套接字的每个先前事件的先前时间。
  • 为什么不使用lasttime = Date.now() 扩充客户端并检查lasttime - Date.now() &gt; fixedtimeout 是否存在?
  • @Anonymous0day 实际上我最终使用了一个键 val 数组来存储客户端地址以及之前的消息时间,然后检查时间之间的差异是否小于 100 毫秒。将此作为答案提交,我会选择它。

标签: javascript node.js socket.io


【解决方案1】:

仅用于验证:

为什么不使用lasttime = Date.now() 扩充客户端并检查lasttime - Date.now() &gt; fixedtimeout 是否存在

或:

使用 key val 数组存储客户端地址和之前的消息时间,然后检查时间差是否小于 100ms

:-)

【讨论】:

  • 我会在 2 小时内奖励这个,所以还不让我这样做。
  • 太棒了!没问题 !很高兴为您提供帮助!
猜你喜欢
  • 1970-01-01
  • 2019-01-19
  • 2015-05-04
  • 1970-01-01
  • 2016-11-05
  • 2012-07-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多