Railsアプリでsocket.ioを使用して、データベースのユーザーをオンライン/オフラインでサーバーします。データの保存にRedisを使用し、app.jsファイルにオフラインで0、オンラインステータスで1を使用しています。
var app = require('express')() , redis = require('redis') , client = redis.createClient() , server = require('http').createServer(app) , io = require('socket.io').listen(server); server.listen(80); io.sockets.on('connection', function (socket) { console.log("client connected") socket.on('join',function(userid){ socket.set('userid',userid); var utm ="user:"+userid+":online_status"; client.set(utm,1); }); socket.on('disconnect',function(userid){ socket.get('userid',function(err,userid){ var utm ="user:"+userid+":online_status"; client.set(utm,0); }); }); });
そして私のapplication.htmlレイアウトでは、すでにsocket.io.jsをapplication.jsファイルに含めており、それはうまく機能しています
var socket = io.connect('http://localhost:80');
socket.on('connect',function(data){
var userID = current_user.id;
socket.emit('join',userID);
});
ユーザーが2つのウィンドウを同時に開いた場合を除いて、すべてが正常に機能しています。1つのウィンドウを閉じると、切断イベントがトリガーされ、ステータスがオフラインになります。ユーザーが1つだけでなくすべてのウィンドウを閉じた場合にのみ、切断イベントを機能させるにはどうすればよいですか。