サポートチャットアプリケーションを構築しています。Pusher.js を介して Laravel Echo 上に構築されています。
サポート/管理者とクライアントの 2 つの側面があります。クライアントがチャットを開始すると、サポートはそれを受け入れることができ、一緒にチャットできます。正常に動作していますが、1 つだけ問題があります。クライアントがオフラインになると (ブラウザーを閉じる、サイトを離れる、インターネット接続が失われるなど)、(間違いではないことを確認するために) 数秒待ってから、チャットを閉じます。そのため、彼が約 1 時間後に戻ってきたとき、アクティブなチャットはありません。
簡単なコードを使用して、プレゼンス チャネルで両側のオンライン ステータスを確認しています。
this.presence = Echo.join('chat');
this.presence
.listen('.pusher:subscription_error', (result) => {
if(this.debug) {
console.log(result);
}
})
.listen('.pusher:member_added', (result) => {
if(!!result.info.is_admin) {
this.presence_users.push(result.info);
}
})
.listen('.pusher:member_removed', (result) => {
let found = _.find(this.presence_users, ['id', result.id]);
let index = this.presence_users.indexOf(found);
this.presence_users.splice(index, 1);
})
.here((result) => {
this.presence_users = _.filter(result, ['is_admin', true]);
});
サポート側では少し異なりますが、ロジックは同じです (心配する必要はありません。ユーザーid
はデータベースからではなく id
、一意の md5 識別子です)。
プレゼンス チャネルは正常に機能しています。しかし、インターネット上のどこにも見つからないのですが、connection_timeout
URL を設定するにはどうすればよいですか? ユーザーがオフラインになったとき、または接続が失われたときに Pusher.js がデータを投稿する URL である可能性があると思います-id
たとえば、私のカスタムフィールド。冒頭で述べたように、ユーザーが誤ってオフラインになった場合、「クールダウン」が必要です。これは、ユーザーが応答できない場合にチャットを閉じるのに役立ちます。
同様の問題の経験はありますか?もしそうなら、どのように解決しましたか?または - Pusher.js で解決することさえ可能ですか?