これを行う従来の方法はすでに説明されています (ユーザーがコンテンツをロードするたびに「last_activity」フィールドを更新します)。
これを行うためのまったく別の方法を指摘します: websockets。
ご存じのとおりhttp
、リクエストとレスポンスの方法で機能します。接続はクライアントによって作成され、応答が送信された後に閉じられます (常にではありませんが、キープアライブによって異なります)。したがって、あなたの問題 (「ユーザーがまだそこにいるかどうかをどうやって知ることができますか?」) は、これを受け入れない限り解決できません。
クライアントまたはサーバーが切断する時が来たと判断するまで接続が閉じられないため、ここでは websocket が有利です。そのため、ユーザーがフォーラムに入ったときに接続を開き、クライアントがページを離れるかブラウザを閉じて接続が閉じられるまでそのままにしておくことができます。
悪いニュース: これらの接続をリッスンするサーバーを作成する必要があります。たとえば、Node.js を使用します。難しいことではありませんが、サーバーへのルート アクセスが必要で、数行のコードを記述します。
従来の方法は簡単で、SQL クエリにすぎませんが、代替手段について知っておくとよいでしょう。
編集
簡単な例
- Node.js をインストールします: http://nodejs.org/
- socket.io をインストールします (これは node.js モジュールです): http://socket.io/
- 次のような単純なサーバーを作成します。
var socketsConnected = 0;
var io = require('socket.io').listen(8080);
io.sockets.on('connection', function (socket) {
socketsConnected++;
// send him some information
socket.emit('totalSocketsOnline', { counter: socketsConnected });
// let the others know that the counter has changed!
socket.broadcast.emit('totalSocketsOnline', { counter: socketsConnected });
// socket events
socket.on('disconnect', function () {
console.log("Socket disconnected");
socketsConnected--;
// again, notify all clients!
socket.broadcast.emit('totalSocketsOnline', { counter: socketsConnected });
});
});
4- 次のような単純なクライアントを作成します。
<script src="http://yourdomain.com:8080/socket.io/socket.io.js"></script>
<script>
var socket = io.connect('http://yourdomain.com:8080');
socket.on('connect', function (data) {
// connected, we are so happy...
});
socket.on('totalSocketsOnline', function (data) {
// wohohoo lets show how many sockets we have online now
alert("We have "+data['counter']+" sockets online now!");
});
</script>
私はそれをコーディングしたばかりなので、おそらくエラーが含まれていて機能しないでしょうが、ここから始めましょう。