前提・実現したいこと
Laravel(Laravel Echo)/Vue.jsを使用して、PusherによるWebsocket通信をするWebアプリを作成しています。
チャットルームのような形で、同じURLにアクセスしているユーザーの入室・退室状況をLaravel Echoを利用してPusherでイベントを発火・受信しています。
実現したいことは、URLにアクセスしているユーザーがブラウザを閉じた場合に、該当のユーザーを退室させることです。
Pusherでdisconnectionになったときのイベントを受信する方法、またはブラウザが閉じられたことをトリガーにしてAPIを叩く方法など、退室処理をするための方法をお聞きしたいです。
発生している問題・エラーメッセージ
現在は、VueのライフサイクルフックdestroyedにてAPIを叩き、ユーザー退室イベントを発火させる処理を書いています。
これだとページ遷移時には期待通りにイベントが発火しますが、ブラウザを閉じられてしまった場合にはイベントが発火せず、該当ユーザーが入室したままになっています。
ブラウザを閉じた際にPusherのchannel情報に「disconection」と表示されています。
Pusher
1Disconnection 2Channels: private-room-channel.10, Lifetime: 353.693676133s 3Socket ID:
試したこと
以下の記事を参考にして、下記ソースのように記述しましたが、console.logでなにも出力されません。
https://stackoverflow.com/questions/62153997/binding-callbacks-on-laravel-echo-with-laravel-websockets?answertab=active#tab-top
JavaScript
1window.Echo.connector.pusher.connection.bind('disconnected', (payload) => { 2 /** 3 * The Channels connection was previously connected and has now intentionally been closed 4 */ 5 console.log('disconnected', payload); 6});
ここに問題に対して試したことを記載してください。
補足情報(FW/ツールのバージョンなど)
Laravel 7
laravel-echo: 1.9.0
pusher-js": 7.0.0
vue: 2.6.11
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。