2013-06-28 46 views
0

我已经得到了它接受潜在的socket.io连接的几万Node.js服务器超时长了数以万计的时候。效率如何JavaScript的setTimeout函数与

对于每个插座,我需要有某种形式的间隔(使用setInterval()),以通知内存中的数据库在插槽中仍然有效。这纯粹是为了垃圾收集的目的 - 当一个套接字被认为是不活动的,它的会话数据将被gc'd。

有两个天真的方法:

  1. 为了有哪些,触发时,将通过所有插座运行,并通知他们是活跃在数据库中的所有插座一个超时
  2. 设置超时为每个套接字

第一种方法对我的应用程序层更高效,但对数据库更加严格,因为所有请求都会立即发生(尽管不是经常发生)。
第二种方法很好,因为数据库命中将更均匀地展开,但我不确定这将对应用程序本身的性能有多苛刻。

所以考虑到这一点,它是有效的有数以万计的同步间隔的前提是他们都非常长(各约每10分钟一次)?

+0

是在内存中的数据库SQL像数据库或是它自己的结构?我会将_marking优化为active_ procedure(制作更新包),而不是对每个套接字使用超时 - 这可能给错误的印象提供更好的解决方案,因为如果调用超时的时间和时间取决于服务器以及套接字是什么时候创造(它可以使整个事情更加恶化) –

回答

2

第一种方法可能不是数据库的详细harshe,因为你可以在同一时间更新了很多纪录,而不是做一个数据库调用每个插座。

通过瓜分中的批次插座,说1000,有几个数据库调用,而不是成千上万的数据库调用的,你可以更新数据库记录。

这将是一个位在那一刻数据库的工作,但考虑,否则你将做10-20数据库调用每一秒更新套接字信息,你可能会减轻负荷对数据库的整体。