私のやり方は、AJAXを使用して特別なハンドラーに定期的にpingを実行することです(30秒に1回)。これは非常に多くのリクエストであるため、last-visitで毎回オンラインユーザーテーブルを更新する代わりに、memcacheを更新しています。データベースレコードを更新するのは、memcacheレコードから5分遅れている場合のみです(負荷に応じて、より大きな遅延またはより小さな遅延を選択できます)。次に、cronジョブは、オンラインユーザーテーブルから古いレコードを削除します。
特定のユーザーがオンラインであるかどうかを確認するには、彼のmemcacheレコードを確認するだけです。エラーが30秒を超えることはありません。データベースが5分以上遅れることはないため、データベースの結果もかなり正確です。
また、これらの定期的なリクエストを使用して、イベントをユーザーにプッシュします。