在我用Erlang开发的websocket服务器中,我想start_timer/3为每个连接使用一个timer(),如果超时没有从客户端接收到"ping",则终止连接.
Erlang定时器是否可以很好地扩展,假设我将拥有大量的客户端连接?
什么是大量的连接?Erlangs VM在内部使用定时器轮来处理定时器,因此它可以很好地扩展到几千个连接.那你可能会遇到麻烦.
通常的诀窍是在计时器上将pid组合在一起.这也是内核倾向于做的事情.例如,如果您有一个必须在200毫秒内唤醒的计时器,您可以提前安排自己,而不是下一个,而是再次使用下一个200毫秒计时器.这意味着您将等待至少200毫秒,也许400毫秒,典型的300毫秒.通过近似这样的计时器,您可以运行更多计时器,因为您可以让一个计时器一次性唤醒大量进程.但是根据定时器频率和定时器的数量,标准send_after/3可能就足够了.
在任何情况下,我会首先假设它可以扩展,然后处理问题,如果它不能通过像上面设想的近似时间.
| 归档时间: |
|
| 查看次数: |
758 次 |
| 最近记录: |