【问题标题】:Close support chat after connection timeout with Laravel Echo与 Laravel Echo 连接超时后关闭支持聊天
【发布时间】:2019-10-09 14:50:29
【问题描述】:

我正在构建一个支持聊天应用程序。它是通过 Pusher.js 在 Laravel Echo 上构建的。

有两个方面 - 支持/管理和客户端。当客户开始聊天时,支持人员可以接受它并且他们可以一起聊天。它按应有的方式工作,但有一件事。当客户端离线(关闭浏览器、离开站点、失去互联网连接......)时,它应该等待大约几秒钟(以确保它不是错误)然后关闭聊天。所以当他大约一个小时后回来时,不会有任何活跃的聊天。

我正在使用简单的代码通过在线通道检查双方的在线状态:

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 标识符)。

Presence 频道运行良好。但是我在互联网上找不到任何地方,如何设置connection_timeout URL?我只是认为它可能是 URL,当用户离线或连接丢失时,Pusher.js 将在其中发布一些数据 - 例如我的自定义 id 字段。正如我在开始时指出的那样,当用户错误地离线时,它应该有一些“冷却时间”。这将有助于在用户无法回复时关闭聊天。

您有遇到类似问题的经验吗?如果是这样,您是如何解决的?或者 - 甚至可以用 Pusher.js 解决它吗?

【问题讨论】:

    标签: php laravel pusher laravel-echo pusher-js


    【解决方案1】:

    嗯,7 天过去了,这里没有答案,所以我认为这不可能像我描述的那样。但可能有一种“hacky”方式:

    1. 创建一个每 10 分钟运行一次的 CRON 作业

    2. 脚本将从带有标志activepending 的数据库中获取所有聊天

    3. 当聊天没有最近消息(过去 5-10 分钟内没有消息)时,检查用户是否在线

    4. 从状态通道获取用户

    $response = $pusher->get('/channels/chat/users');
    if($response['status'] == 200) {
        $users = json_decode($response['body'], true)['users'];
    }
    
    1. 如果其中至少有一个在线,请跳过,否则请等待一小段时间(5 秒,以确保其确定),再次检查在线状态,当他们仍然离线时,关闭聊天。

    尚未对其进行测试,因为它还不是必需的。也许有人会觉得这很有帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-11-29
      • 2021-01-31
      • 2010-12-09
      • 1970-01-01
      • 2018-11-29
      • 2021-06-24
      • 2014-01-11
      • 1970-01-01
      相关资源
      最近更新 更多