业务系统与聊天系统流程设计,这样架构合理吗?

悉地网

357 4 3
4个回答

six

token设定一个验证算法,GatewayWorker自己验证就行,用不着再请求一遍tp

  • 悉地网 19天前

    我的token是保存在业务数据库中,并且有时效的

  • 悉地网 19天前

    你说用JWT?

  • six 19天前

    jwt也行

  • 悉地网 19天前

    如果是一些复杂的鉴权逻辑呢?

  • six 19天前

    复杂的不走数据库都可以直接GatewayWorker里做吧

  • 悉地网 19天前

    有一些场景需要业务系统进行鉴权比较合适,比如用户付费聊天?如果鉴权逻辑放在聊天系统,聊天系统会不会有点臃肿啊?

  • 悉地网 19天前

    后续别的系统连接聊天系统不好管理把?

  • six 19天前

    业务都走tp啊,GatewayWorker只做发送消息

  • 悉地网 19天前

    每次收发聊天消息都要经过web吗?还是直连聊天系统?

  • six 19天前

    业务都走web,gatewayWorker只做消息发送

  • 悉地网 19天前

    不做客户端消息接收?

  • 悉地网 19天前

    好像理解你的意思了,跟文档思想一样

weijer

结合webman pusher服务就行了,消息处理端不需要跟数据库产生任何连接,仅作数据推送

  • 悉地网 19天前

    我没有使用webman,业务系统用的是tp框架

  • 悉地网 19天前

    聊天系统只负责消息收发?不干其他事

efnic

我的设计是:uniapp连接GatewayWorker时,GatewayWorker返回验证信息【auth、client_id、timestamp】,设置未绑定超时关闭;
uniapp请求头携带token,数据报文为上一步的验证信息,请求thinkPHP业务系统;

thinkPHP业务系统,在鉴权成功后,通过GatewayClient绑定用户id、加入分组、关闭连接等等操作。

efnic
/**
     * 将client_id与uid绑定
     * @param string $client_id
     * @param string $uid
     * @param string $auth
     * @return void
     * @throws Exception
     */
    public static function bindUid(string $client_id, string $uid, string $auth): bool
    {
        if (empty($auth) || strlen($auth) < 32) {
            throw new Exception('auth验证参数为空');
        }

        $session = Gateway::getSession($client_id);
        $_auth = $session['auth'] ?? $session['uniqid'] ?? '';
        if (empty($_auth)) {
            throw new Exception('session验证参数为空');
        }

        if (hash_equals($auth, $_auth)) {
            Gateway::bindUid($client_id, $uid);
            return true;
        }

        return false;
    }
  • efnic 18天前

    业务系统,鉴权通过后绑定uid时,一定要验证接口收到的auth和GatewayWorker系统内Session是否相同。

  • 悉地网 18天前

    你的消息收发是直连吗?

  • efnic 18天前

    这个看你需求,反正是GatewayWorker绝不做鉴权的操作。

  • 悉地网 18天前

    鉴权,绑定uid,消息存储等,都在业务系统中实现

  • 悉地网 18天前

    GatewayWorker仅做消息收发功能

  • wocall 18天前

    学习了👍

  • 悉地网 18天前

    一起学习把

🔝