兼容ie6,7,8 的 ssm+redis的简单聊天室搭建
来源:互联网 发布:淘宝购物车怎么扩容 编辑:程序博客网 时间:2024/06/13 11:11
项目主要采用的技术有ssm+redis+ajax轮询,本来想用webSocket或者Socket的,但百度了一下,WebSocket不兼容ie8.我做的教育产品要兼容ie8,所以自己写了一个简单的聊天室,其中jedis怎么封装,怎么讲对象 字符串互转我就不说了,这里主要讲流程
redis对数据加减的处理效果还是很快的。所以对小聊天室来说 并发问题可以不用考虑
废话不多说,用代码来演示:
首先,前端用ajax发起轮询的代码:
一个是发起ajax轮询的function,一个是发送消息的function
> function getAjaxContent() { > //----------------------获取ajax请求的jQuery方法> $.ajax({> url:'${ctx}/chat/getMsg',> dataType:'json',> contentType : "application/json;charset=UTF-8",> data:{> "teamChatId":"team-abcd123",> "teamId":1> },> success:function (data) { > console.log(data);> //根据data更新页面> $("#friendsList").empty();> for(var d in data){> var $li=$('<li><a href="#" onclick="setReceiver(this);">'+data[d].content+'</a></li>')> $li.appendTo($("#friendsList"));> }> }> })> }> function sendChat() { //----------------------点击发送时调用的方法,发送聊天信息(SpringMVC通过@RequestBody注释得到data内容)> console.log($("#msg").val());> $.ajax({> url:'${ctx}/chat/sendChat',> type:'post',> data:{> "teamChatId":"team-abcd123",> "content" :$("#msg").val(),> "senderId" : 1,> "teamId" :1,> "senderName" : "背锅侠",> "senderIcon" : "https://ss3.bdstatic.com/70cFv8Sh_Q1YnxGkpoWK1HF6hhy/it/u=73079245,360669800&fm=11&gp=0.jpg",> }> });> }
我们先对每个聊天室定义一个标识符,叫teamChatId。那么发送消息时,后台根据这个唯一标识符到redis中拿到该聊天室的聊天数据
发送消息时,传需要封装的数据以及该聊天室的teamChatId到后台,然后后台将消息放进redis 中:
重要代码:
public void sendMsg(TeamChitchat teamChitchat){ teamChitchat.setChitchatId(UUID.randomUUID().toString()); teamChitchat.setCreateTime(new Date()); try { //将更新后的数据封装回redis; String data = MAPPER.writeValueAsString(teamChitchat); chatRedisService.lpush(teamChatId, data); //封装进数据库 teamChitchatMapper.insertSelective(teamChitchat); } catch (Exception e) { e.printStackTrace(); throw new RuntimeException("【redis查询小组聊天】格式转换失败:"+e.getMessage()); } }
JedisAPI有一个lpush方法,可以将字符串push进队列中
然后,顺便存到数据库(这里如果你觉得对redis放心也可以存到redis中)
取得方法:
前台轮询时,发送teamChatId到后台,后台根据teamChatId这个key到redis中拿数据,如果拿不到,就到数据库中拿
public List<TeamChitchat> getTeamChat(Integer teamId,String teamChatId){ List<String> data = chatRedisService.lrange(teamChatId, 0, -1); if(!CollectionUtils.isEmpty(data)){ return Strings2TeamChatConverter.converter(data); }else{ TeamChitchat teamChitchat = new TeamChitchat(); teamChitchat.setTeamId(teamId); List<TeamChitchat> chatList = teamChitchatMapper.select(teamChitchat); for (TeamChitchat temp : chatList) { try { String returnData = MAPPER.writeValueAsString(temp); chatRedisService.lpush(teamChatId, returnData); } catch (JsonProcessingException e) { e.printStackTrace(); } } return chatList; } }
阅读全文
0 0
- 兼容ie6,7,8 的 ssm+redis的简单聊天室搭建
- epoll 搭建简单的聊天室
- Workerman搭建简单的聊天室
- ssm框架的简单搭建
- ssm项目的简单搭建
- ie6的兼容方法
- 简单的SSM框架的搭建
- 【聊天室】android 简单的聊天室
- 兼容IE6的min-width、min-height的简单方法
- 关于scrolltop 兼容 IE6/7/8, Safari,FF的方法
- min-height对ie6, 7, 8及ff的兼容
- 关于scrolltop 兼容 IE6/7/8, Safari,FF的方法
- CSS hack 属性的使用(兼容IE6、7、8、9)
- IE6-8 火狐兼容的IFRAME写法
- 兼容IE6,7的inline-block
- [JavaScript]兼容IE6/7的getElementByClassName
- 简单的SSM搭建步骤,以备后用。
- 搭建简单的ssm maven框架
- [BFS] FZU 2150
- 关于java重载函数,参数为null时,调用的处理。(精确性原则)
- 安卓学习笔记——Android点击事件的四种写法
- 一个简单的子类继承父类私有方法代码
- KMP算法
- 兼容ie6,7,8 的 ssm+redis的简单聊天室搭建
- 预编译头的作用
- Tensorflow学习与应用二
- HTTPClient和HttpURLConnection实例对比
- FPGA作业3:通过例化设计18进制计数器
- 调整数组使奇数全部都位于偶数前面。
- 洛谷mNOIP模拟赛d1t1 斐波那契(90分)
- 我人生中第一篇blog
- 近况整理