Erlang:会话管理和超时

Kir*_*mov 7 erlang

我正在编写http会话管理器(基于gen_server).该服务器从内存存储中创建和删除会话.我需要在超时时删除过期的会话.我有两个解决方案:

  1. 创建一个计时器以从管理器中删除过期的会话
  2. 为每个会话创建计时器

第一个解决方案在未处理所有会话时锁定服务器(锁定问题).第二个解决方案需要每个会话的进程(内存问题).

问题是哪种解决方案是正确的?

谢谢!

Hyn*_*dil 5

使用timer:send_after,timer:exit_aftertimer:kill_after.timer模块ets用于存储计时器,gen_server整个VM 只有一个.在每个会话记录中存储计时器参考,以便重新启动计时器.这是简单而干净的解决方案.