NodeJS - 机器人会话的多个超时与一个间隔
NodeJS - Multiple Timeouts vs one Interval for sessions in bots
我希望 Messenger bot 通知用户,如果他们一段时间没有 write/give 输入到 bot,他们的会话就结束了。为此,我首先考虑为每个用户使用 setTimeout()
,这将在 activity 时重置。但这意味着如果有 100 个活跃用户,则同时会有 100 个 Timeouts
。
我想知道,是否有一个 Interval
而不是每 30-60 秒检查一次每个用户的会话结束时间戳的更好方法?活跃用户存储在内存中。
setTimeout
在您的情况下更精确:每个会话都将独立结束,并且更接近它应该结束的时间。它还会更均匀地分布 activity。由于 JS 是单线程的,即使同时有数百个超时,也不会并行触发。
setInterval
将每 30-60 秒创建一个 activity 的峰值,并且有时会让会话存活的时间超过它们应有的时间。
同时多次超时运行的代价,请看this answer。
我希望 Messenger bot 通知用户,如果他们一段时间没有 write/give 输入到 bot,他们的会话就结束了。为此,我首先考虑为每个用户使用 setTimeout()
,这将在 activity 时重置。但这意味着如果有 100 个活跃用户,则同时会有 100 个 Timeouts
。
我想知道,是否有一个 Interval
而不是每 30-60 秒检查一次每个用户的会话结束时间戳的更好方法?活跃用户存储在内存中。
setTimeout
在您的情况下更精确:每个会话都将独立结束,并且更接近它应该结束的时间。它还会更均匀地分布 activity。由于 JS 是单线程的,即使同时有数百个超时,也不会并行触发。
setInterval
将每 30-60 秒创建一个 activity 的峰值,并且有时会让会话存活的时间超过它们应有的时间。
同时多次超时运行的代价,请看this answer。