我目前正在为自己的社交网络(temal.cf(编程。
- 用户可以注册、登录并与其他用户聊天
- 如果用户1登录;last_login";将更新到当前时间;"状态";将变为";在线";在phpmyadmin数据库中
- 如果用户1注销;"状态";至";离线">
因此,如果用户只是关闭浏览器或正在关闭选项卡,他将保持在线状态。这是个问题。
我现在解决这个问题的想法是
- 每1或2分钟更新一行";last_login";数据库中
- 如果用户1关闭浏览器,它将不再向数据库发送更新
- 如果另一个用户检查用户1的在线状态,它将检查用户1当前时间和上次更新时间之间的差异
- 如果超过2-3分钟,如果是,它应该说用户1处于离线状态,如果不是,它应该认为用户1处于在线状态
那么,我如何用php语言每分钟自动向sqlphpmyadmin数据库发送一条新记录呢?
这是不能通过的,只有PHP才能通过,你必须使用某种前端解决方案和后端解决方案
少数解决方案是:
- Socket.io
- 正在发送AJAX,每分钟使用setInterval。。。(这个主意很糟糕,但在某些情况下它会起作用(,然后用CRON脚本检查时间差异
- 每次你做任何后台活动都只更新你的DB时间,这对性能来说也是个糟糕的想法。。。,同样,如果你有像MyISAM或任何其他数据库引擎,他们有特定的数据库工作规则,例如MyISAM在更新单行时会锁定整个表。。。所以所有其他请求都必须等待
- 无尽的AJAX(wrost idea(,当你得到状态代码499时,你就知道发生了什么。。。但如果你这样做,那就有问题了
有很多解决方案,但大多数都很糟糕,你的老板不会高兴:D,最好是Soce.io,或者只做2次,每10分钟发送一次,如果你的应用程序在联机状态下有一些延迟,它就可以了。。。