基于websocket的聊天功能实现
1.前端咱们使用layui的前端框架layim组件,需要的同学直接进官网获取代码授权,不建议破解代码。
2.后端咱们写个简单的 websocket服务,由于时间有限我会抽空分步写出实现步骤,需要的同学关注,当然如果本身是大神可以绕道。
先给大家看一下效果图
登录
![5298dd5780c99815f041b3d319326716.png](https://i-blog.csdnimg.cn/blog_migrate/6a01b30309dca86e3c14a3a0c70571c7.jpeg)
好友聊天
![831671c19f7bcfdb959ba7bdc4fe0a8b.png](https://i-blog.csdnimg.cn/blog_migrate/1f67b903d0a23d7ccefe9ea8d8b7a8b9.jpeg)
换肤功能
![e9852811786fbcc045139551d2c03864.png](https://i-blog.csdnimg.cn/blog_migrate/482d30caef1fa8b224d99bdc9da6d8cb.jpeg)
消息提示
![ad722eca335cee3f7a5a88df01f18a1f.png](https://i-blog.csdnimg.cn/blog_migrate/6a4bbe30271d87963f9c6b38e1cab25a.jpeg)
好友消息提示
![66a168d292d8b8f100b1aa5547818d01.png](https://i-blog.csdnimg.cn/blog_migrate/838c4628367ff718ace36c90f047346e.jpeg)
最近联系人和群
![f3e5bdb5330dfcdca552baeec0e1db54.png](https://i-blog.csdnimg.cn/blog_migrate/70dbc20caf6af156f4b2226928b9ab92.jpeg)
图片发送浏览
![952c29158d7d3a25424aa01b1b92310b.png](https://i-blog.csdnimg.cn/blog_migrate/264e53860192a6cfcb64d6a5dba85fa0.jpeg)
qq基本功能都有,不一一介绍了
![c8b4710a9ae5354163c0385fff400efc.png](https://i-blog.csdnimg.cn/blog_migrate/f8d75c1b9437279ce27c96f22ac3a632.jpeg)
再次向layui的作者闲心表示致敬
看完了效果咱们做做前端的准备工作
websocket前端相对比较简单,以前服务端作者用Tomcat7和Tomcat9的jar包,这两个版本会有些写法上的区别作者此处用Tomcat9作为服务端。
首先我们写一个调用连接服务的方法
function connection(){
//此处用于页面提示
tips.html("开始连接服务……");
//判断浏览器是否支持
if('WebSocket' in window){
//sy()获取服务器地址方法,imchat为websocket入口地址,id为接入参数,可以不要参数
websocket = new WebSocket("ws://"+sy()+"/imchat/"+id);
}else{
tips.html("不支持websocket");
}
//连接发生错误的回调方法
websocket.onerror = function(ev,data){
tips.html("连接发生错误的回调方法");
};
//连接成功建立的回调方法
websocket.onopen = function(e){
// alert('连接成功建立的回调方法');
tips.html("");
};
//接收到消息的回调方法
websocket.onmessage = function(event){
//接收到消息处理为json对象
var json=JSON.parse(event.data);
console.log("接收信息:");
console.log(event.data);
//判断消息类型
if(json.key=="offline"){
//设置用户离线 并提示
layim.setFriendStatus(json.id, 'offline');
layim.setChatStatus('离线');
layer.msg(json.content+"无法接收到消息