7-27这个测试环节中的问题

来源:7-27 IM系统的ACK机制测试

光_cfstOQ

2025-09-22

在测试环节中

JSONObject jsonObject = JSONObject();
jsonObject.put(, userId);
jsonObject.put(,objectId);
jsonObject.put(,content);
bizBody.setData(JSON.(jsonObject));

这个objectId  在后面调用到的RouterHandlerServiceImpl中的sendMsgToClient方法,里面并没有做userid的校验,也就是说 每次发送 都是给userId发送,也就是自己给自己发送数据,并没有真正给objectId发送数据 这个是测试数据的过程中的bug吧,老师你的实例 是怎么做到userId  给objectId客户端发送数据 objectId又能收到数据的?

(ImMsgBody imMsgBody) {
    Long userId = imMsgBody.getUserId();
    ChannelHandlerContext ctx = ChannelHandlerContextCache.(userId);
    (ctx != )
    {
        String msgId = UUID.().toString();
        imMsgBody.setUserId(userId);
        ImMsg respMsg = ImMsg.(ImMsgCodeEnum..getCode(), JSON.(imMsgBody));
        ctx.writeAndFlush(respMsg);
        ;
    }
    ;
}

这里的userId  永远都是发送者的Id啊  并没有从这个data中获取objectId这个动作 我不知道你的代码是怎么实现userId 给objectId 发送数据的

System..println();
String content = scanner.next();
ImMsgBody bizBody = ImMsgBody();
bizBody.setAppId(AppIdEnum..getCode());
bizBody.setUserId(userId);
bizBody.setBizCode();
JSONObject jsonObject = JSONObject();
jsonObject.put(, userId);
jsonObject.put(,objectId);
jsonObject.put(,content);
bizBody.setData(JSON.(jsonObject));
ImMsg heartBeatMsg = ImMsg.(ImMsgCodeEnum..getCode(), JSON.(bizBody));
userIdChannelMap.get(userId).writeAndFlush(heartBeatMsg);


写回答

1回答

Danny_Idea

2025-09-24

这里只是演示一个发消息经过im服务器,然后再由im服务器响应数据回来的这么个链路,这里你可以开两个client来模拟相互通信,原理都是一样的。

0
0

SpringCloudAlibaba高并发仿斗鱼直播平台实战

SpringCloudAlibaba高并发仿斗鱼直播平台实战

443 学习 · 361 问题

查看课程