关于定时器的问题

marsColin

@walkor,最近在开发一个新产品,用户连接后会创建一个对象,这个对象会启动一个定时器,定时器时间到了会判断用户超时,如果在时间范围内用户访问了对象,则定时器会被删除,因为我看了定时器使用注意项,有2个问题想请教下
1、如果我对象里面自己删除定时器,定时器是不是还存在,这个对象我存储在globalData里面
2、注意事项说了定时器不能跨进程删除,例如a进程设置的定时器无法在b进程直接调用Timer::del接口删除,我的客户端从哪个进程访问的,我没有办法判断,如果客户端连接后删除对象里面的定时器是不是代表不能够删除成功

PS:请W大大多多指导

2350 1 0
1个回答

walkor

定时器里可以删除自己。

你的这个最简单的方法是设置一个全局定时器,每秒跑一次,轮询所有连接检查是否超时,不用考虑定时器增加删除问题。可以参考手册这个做法 http://doc.workerman.net/faq/heartbeat.html

  • marsColin 2019-11-30

    大佬,我这个基本上每个对象都会有一个定时器,也就是说例如我A用户通过进程1创建一个对象并且启动定时器,我B用户通过进程2创建一个对象并且启动定时器,可能我下次A用户连接是走的进程2,这个时候我对象里面的定时器按照注意事项是不是就没有办法删除,因为这个对象是在进程1里面创建并且启动的定时器

  • walkor 2019-12-01

    是的跨进程无法删除定时器。

  • marsColin 2019-12-02

    感觉W大大周末还抽空回答我的问题,那如果我对象被销毁后我的定时器是不是还一直存在,或者说我在对象里面删除定时器可以解决这个问题吗?或者能不能指导下我怎么解决这种问题

  • walkor 2019-12-02

    删除定时器只能调用Timer::del,和对象是否销毁没有关系。只要在对的进程内调用Timer::del就可以删除这个进程的定时器。

年代过于久远,无法发表回答
🔝