netty点对点聊天保存聊天记录

接着这一篇点对点通讯的来,请先弄懂netty实现点对点通讯的原理

效果
聊天界面
这里写图片描述

这里写图片描述

聊天记录
这里写图片描述
实现方案
1首先拼接用户id和好友id在Redis数据库中注册key值

    Jedis   jedis = new Jedis("xxx.xx.xx.xxx", 6379);
        //权限认证
        jedis.auth("xxxx");
        if(!(jedis.exists(key))){
            //聊天记录保存时间为1个月
              jedis.setex(key,2592000,value);
              jedis.close();
        }

2当实时聊天时将 聊天内容分别添加到用户自己的key和好友的key

   public static void broadcastMess(String sender ,String  fid,String message) {

             for(int i=0;i<channelInfos.get(fid).size();i++){
                    channelInfos.get(fid).get(i).writeAndFlush(new TextWebSocketFrame("chatflag"+","+sender+","+message));
                }
             //用户本人保存一份
             UserInfoManager.appendString(sender+fid,","+sender+":"+message);
             //同时备份到好友的聊天记录
             UserInfoManager.appendString(fid+sender,","+sender+":"+message);
    }

如果只往自己的key中填数据那么,那么就就只能获得自己的聊天记录,你发送的信息往好友的Key填充时,同样好友发送消息时也会往你的Key中填充记录,这样双方的key都可以保存双方的聊天记录。
就像这样
这里写图片描述
这里写图片描述

3当需要聊天记录时,就直接去Redis通过key值去取
接口

    public PageData selectChatLog() throws Exception {
        PageData pd=this.getPageData();
        PageData result=new PageData();
        String logFlag=pd.getString("logFlag");
        Jedis   jedis = new Jedis("xxx.xx.xx.xxx", 6379);
        //权限认证
        jedis.auth("xxxx");
        String chatLog=jedis.get(logFlag);
        result.put("code", "200");
        result.put("msg", chatLog);
        return result;
    }

请求接口,并把请求的数据处理成dom

   $(function () {
            $.ajax({
                type : "POST",
                url : domianURL + "/equipment2/selectChatLog.webapp",
                data : {
                    logFlag : "5083117106284601"
                },
                dataType : "json",
                success : function(data) {
                   console.log(data);
                   if(data.msg!=""){
                       var chatlogs=data.msg.split(",");
                       for(var i=1;i<chatlogs.length;i++){
                           var chatInfo=chatlogs[i].split(":");
                           if(chatInfo[0]==myid){
                               appendRHtml(chatInfo[1]);
                           }
                           if(chatInfo[0]==fid){
                               appendLHtml(chatInfo[1])
                           }
                       }

                   }

                }
            })
        })

        function appendRHtml(info){
            var text = "<div class='chat-show row-flex-end'>"
                + "<span class='chat-show-span row-center'>"
                + info
                + "</span>"
                + "<img src='../../img/jiaxiaohutong/mylogo.jpg' class='chat-show-img'>"
                + " </div>";
            $("#logCentent").append(text);
        }
       function appendLHtml(info){
           var text ="<div class='chat-show row-flex-start'>"
               + "<img src='../../img/jiaxiaohutong/mylogo.jpg' class='chat-show-img'>"
               + "<span class='chat-show-span row-center'>" + info
               + "</span>" + " </div>";
           $("#logCentent").append(text);
       }

这样就可以保存聊天记录啦

猜你喜欢

转载自blog.csdn.net/weixin_39168678/article/details/80828695
今日推荐