ユーザーの最後のウィンドウまたはタブが閉じられていることを検出する方法を見つけようとしています。私はそれが実際にユーザーのための最後の接続であることを検出する方法を見つけることができないようです。私は自分のチャンネルへの接続を追跡するモデルを持っており、他のアクティブなタブが接続で開いている場合に切断するときにユーザーの接続レコードを削除したくありません。最後のウィンドウの検出/ Tab ActionCableで閉じる
だから、それぞれの接続をチェックして、同じ識別子を持つ他のアクティブな接続であるかどうかを確認する必要があります。
私は、切断メソッドでRemoteConnectionsのチェックを設定しようとしました。しかし、それが呼び出されると、閉じている接続がRemoteConnectionsの下で返されているように思えます。
module ApplicationCable
class Connection < ActionCable::Connection::Base
identified_by :current_user
def connect
self.current_user = find_verified_user
logger.add_tags 'ActionCable', current_user.username
logger.debug self.current_user.username + " now connected."
end
def disconnect
self.close()
logger.debug ActionCable.server.remote_connections.where(current_user: current_user)
logger.debug ActionCable.server.remote_connections.where(current_user: current_user).identifiers
logger.debug ActionCable.server.remote_connections.where(current_user: current_user).identifiers.inspect()
end
end
このセットアップは、その識別子を使用して、最後の接続が閉じている場合でも、次の値を返します。
[ActionCable] [[email protected]] UserChannel stopped streaming from user:Z2lkOi8vYWxseWNoYXQvVXNlci80Nw
[ActionCable] [[email protected]] #<ActionCable::RemoteConnections::RemoteConnection:0x00000007062690>
[ActionCable] [[email protected]] #<Set:0x00000007791b78>
[ActionCable] [[email protected]] #<Set: {:current_user}>
私はちょうど彼らとの接続を追跡するためのモデルを設定することにより、これまでに対処してきました各チャンネルごとに開閉します。しかし、オーバーヘッドが増え、管理が面倒です。
誰でもこれを管理する方法を提案できますか?私はActionCableのAPIドキュメントを精査していて、空になっています。