依星源码资源网,依星资源网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 9|回复: 0

仿微信的聊天工具,网页版多端聊天软件 具有良好的横向扩展能力

[复制链接] 主动推送

7984

主题

8036

帖子

9217

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
9217
发表于 前天 10:52 | 显示全部楼层 |阅读模式
仿微信的聊天工具,网页版多端聊天软件 具有良好的横向扩展能力

一个仿微信的聊天工具。后端采用springboot+netty实现,web端使用vue,移动端使用uniapp,支持私聊、群聊、离线消息、发送图片、文件、语音、emoji表情、视频聊天等功能。



一、项目简介
  • 一个仿微信实现的网页版聊天软件,目前完全开源。
  • 支持私聊、群聊、离线消息、发送语音、图片、文件、emoji表情等功能
  • 支持视频聊天(基于webrtc实现,需要ssl证书)
  • 后端采用springboot+netty实现,网页端使用vue,移动端使用uniapp
  • 服务器支持集群化部署,每个im-server仅处理自身连接用户的消息

二、功能概述特点
  • 一个仿微信实现的网页版聊天软件,目前完全开源且免费
  • 支持web端和移动端同时在线以及消息同步
  • 后端服务支持集群化部署,具有良好的横向扩展能力
  • 消息推送功能已进行SDK封装,可快速接入企业项目

合适人群
如果您是以下人群之一,那么盒子IM将会非常适合您:
  • 企业中的项目需要开发IM模块,希望快速整合盒子IM的部分功能
  • 对IM系统比较感兴趣,想学习如何独立编写一个优雅且高性能的IM系统
  • 在校生或者刚参加工作的小伙伴,通过学习优质的开源项目提升自己的编程实战能力


三、技术选型
前置技能
掌握以下技能:
后端:Springboot、Mybatis-plus、Netty、Mysql、Redis
前端:Vue、Uniapp
地环境搭建技术选型
后端框架:Springboot、Netty、Mybatis-plus、Swagger、Jwt
技术组件:Mysql、Redis、Minio、Coturn、Nginx
前端技术:Vue、Eelement-ui、Uniapp、Webrtc
基础环境安装安装GIT、JDK1.8、IDEA、Maven、HbuilderX(略)

项目结构[td]
模块功能
im-platform与页面进行交互,处理业务请求
im-server推送聊天消息
im-client消息推送sdk
im-common公共包
im-uiweb页面
im-uniappapp页面
消息推送方案

仿微信的聊天工具,网页版多端聊天软件 具有良好的横向扩展能力

仿微信的聊天工具,网页版多端聊天软件 具有良好的横向扩展能力
  • 当消息的发送者和接收者连的不是同一个server时,消息是无法直接推送的,所以我们需要设计出能够支持跨节点推送的方案
  • 利用了redis的list数据实现消息推送,其中key为im:unread{serverid},每个key的数据可以看做一个queue,每个im-server根据自身的id只消费属于自己的queue
  • redis记录了每个用户的websocket连接的是哪个im-server,当用户发送消息时,im-platform将根据所连接的im-server的id,决定将消息推向哪个queue
本地快速部署
1.安装运行环境
  • 安装node:v14.16.0
  • 安装jdk:1.8
  • 安装maven:3.6.3
  • 安装mysql:5.7,密码分别为root/root,运行sql脚本(脚本在im-platfrom的resources/db目录)
  • 安装redis:5.0
  • 安装minio,命令端口使用9001,并创建一个名为"box-im"的bucket,并设置访问权限为公开
2.启动后端服务
  1. mvn clean package
  2. java -jar ./im-platform/target/im-platform.jar
  3. java -jar ./im-server/target/im-server.jar
复制代码
3.启动前端web
  1. cd im-ui
  2. npm install
  3. npm run serve
复制代码
访问 http://localhost:8080
4.启动uniapp-h5 将im-uniapp目录导入HBuilderX,点击菜单"运行"->"开发环境-h5" 访问 http://localhost:5173
快速接入
消息推送的请求代码已经封装在im-client包中,对于需要接入im-server的小伙伴,可以按照下面的教程快速的将IM功能集成到自己的项目中。
注意服务器端和前端都需要接入,服务器端发送消息,前端接收消息。
4.1 服务器端接入
引入pom文件
  1. <dependency>
  2.     <groupId>com.bx</groupId>
  3.     <artifactId>im-client</artifactId>
  4.     <version>2.0.0</version>
  5. </dependency>
复制代码
内容使用了redis进行通信,所以要配置redis地址:
  1. spring:
  2.   redis:
  3.     host: 127.0.0.1
  4.     port: 6379
复制代码
直接把IMClient通过@Autowire导进来就可以发送消息了,IMClient 只有2个接口:
  1. public class IMClient {

  2.     /**
  3.      * 发送私聊消息
  4.      *
  5.      * @param message 私有消息
  6.      */
  7.     public<T> void sendPrivateMessage(IMPrivateMessage<T> message);

  8.     /**
  9.      * 发送群聊消息(发送结果通过MessageListener接收)
  10.      *
  11.      * @param message 群聊消息
  12.      */
  13.     public<T> void sendGroupMessage(IMGroupMessage<T> message);
  14. }
复制代码
发送私聊消息(群聊也是类似的方式):
  1. @Autowired
  2. private IMClient imClient;

  3. public void sendMessage(){
  4.         IMPrivateMessage<PrivateMessageVO> sendMessage = new IMPrivateMessage<>();
  5.         // 发送方的id和终端类型
  6.         sendMessage.setSender(new IMUserInfo(1L, IMTerminalType.APP.code()));
  7.         // 对方的id
  8.         sendMessage.setRecvId(2L);
  9.         // 推送给对方所有终端
  10.         sendMessage.setRecvTerminals(IMTerminalType.codes());
  11.         // 同时推送给自己的其他类型终端
  12.         sendMessage.setSendToSelf(true);
  13.         // 需要回推发送结果,将在IMListener接收发送结果
  14.         sendMessage.setSendResult(true);
  15.         // 推送的内容
  16.         sendMessage.setData(msgInfo);
  17.         // 推送消息
  18.         imClient.sendPrivateMessage(sendMessage);
  19. }
复制代码
监听发送结果: 1.编写消息监听类,实现MessageListener,并加上@IMListener 2.发送消息时指定sendResult为true
  1. @Slf4j
  2. @IMListener(type = IMListenerType.ALL)
  3. public class PrivateMessageListener implements MessageListener {

  4.     @Override
  5.     public void process(IMSendResult<PrivateMessageVO> result){
  6.         PrivateMessageVO messageInfo = result.getData();
  7.         if(result.getCode().equals(IMSendCode.SUCCESS.code())){
  8.             log.info("消息发送成功,消息id:{},发送者:{},接收者:{},终端:{}",messageInfo.getId(),result.getSender().getId(),result.getReceiver().getId(),result.getReceiver().getTerminal());
  9.         }
  10.     }
  11. }
复制代码
4.2 前端接入 首先将im-ui/src/api/wssocket.js拷贝到自己的项目。
接入代码如下:
  1. import * as wsApi from './api/wssocket';

  2. let wsUrl = 'ws://localhost:8878/im'
  3. let token = "您的token";
  4. wsApi.connect(wsUrl,token);
  5. wsApi.onConnect(() => {
  6.     // 连接打开
  7.     console.log("连接成功");
  8. });
  9. wsApi.onMessage((cmd,msgInfo) => {
  10.     if (cmd == 2) {
  11.             // 异地登录,强制下线
  12.             console.log("您已在其他地方登陆,将被强制下线");
  13.     } else if (cmd == 3) {
  14.             // 私聊消息
  15.             console.log(msgInfo);
  16.     } else if (cmd == 4) {
  17.             // 群聊消息
  18.             console.log(msgInfo);
  19.     }
  20. })
  21. wsApi.onClose((e) => {
  22.           if (e.code != 3000) {
  23.               console.log("意外断开,进行重连");
  24.               wsApi.reconnect(wsUrl,token);
  25.     }else{
  26.                     console.log("主动断开");
  27.           }
  28. });
复制代码

私聊:

仿微信的聊天工具,网页版多端聊天软件 具有良好的横向扩展能力

仿微信的聊天工具,网页版多端聊天软件 具有良好的横向扩展能力


群聊:

仿微信的聊天工具,网页版多端聊天软件 具有良好的横向扩展能力

仿微信的聊天工具,网页版多端聊天软件 具有良好的横向扩展能力

仿微信的聊天工具,网页版多端聊天软件 具有良好的横向扩展能力

仿微信的聊天工具,网页版多端聊天软件 具有良好的横向扩展能力


好友列表:

仿微信的聊天工具,网页版多端聊天软件 具有良好的横向扩展能力

仿微信的聊天工具,网页版多端聊天软件 具有良好的横向扩展能力


群聊列表:

仿微信的聊天工具,网页版多端聊天软件 具有良好的横向扩展能力

仿微信的聊天工具,网页版多端聊天软件 具有良好的横向扩展能力


微信小程序:

仿微信的聊天工具,网页版多端聊天软件 具有良好的横向扩展能力

仿微信的聊天工具,网页版多端聊天软件 具有良好的横向扩展能力

仿微信的聊天工具,网页版多端聊天软件 具有良好的横向扩展能力

仿微信的聊天工具,网页版多端聊天软件 具有良好的横向扩展能力




游客,本帖隐藏的内容需要积分高于 2 才可浏览,您当前积分为 0

提取码下载:
游客,本帖隐藏的内容需要积分高于 99 才可浏览,您当前积分为 0





相关帖子

扫码关注微信公众号,及时获取最新资源信息!下载附件优惠VIP会员5折;永久VIP免费
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

免责声明:
1、本站提供的所有资源仅供参考学习使用,版权归原著所有,禁止下载本站资源参与商业和非法行为,请在24小时之内自行删除!
2、本站所有内容均由互联网收集整理、网友上传,并且以计算机技术研究交流为目的,仅供大家参考、学习,请勿任何商业目的与商业用途。
3、若您需要商业运营或用于其他商业活动,请您购买正版授权并合法使用。
4、论坛的所有内容都不保证其准确性,完整性,有效性,由于源码具有复制性,一经售出,概不退换。阅读本站内容因误导等因素而造成的损失本站不承担连带责任。
5、用户使用本网站必须遵守适用的法律法规,对于用户违法使用本站非法运营而引起的一切责任,由用户自行承担
6、本站所有资源来自互联网转载,版权归原著所有,用户访问和使用本站的条件是必须接受本站“免责声明”,如果不遵守,请勿访问或使用本网站
7、本站使用者因为违反本声明的规定而触犯中华人民共和国法律的,一切后果自己负责,本站不承担任何责任。
8、凡以任何方式登陆本网站或直接、间接使用本网站资料者,视为自愿接受本网站声明的约束。
9、本站以《2013 中华人民共和国计算机软件保护条例》第二章 “软件著作权” 第十七条为原则:为了学习和研究软件内含的设计思想和原理,通过安装、显示、传输或者存储软件等方式使用软件的,可以不经软件著作权人许可,不向其支付报酬。若有学员需要商用本站资源,请务必联系版权方购买正版授权!
10、本网站如无意中侵犯了某个企业或个人的知识产权,请来信【站长信箱312337667@qq.com】告之,本站将立即删除。
郑重声明:
本站所有资源仅供用户本地电脑学习源代码的内含设计思想和原理,禁止任何其他用途!
本站所有资源、教程来自互联网转载,仅供学习交流,不得商业运营资源,不确保资源完整性,图片和资源仅供参考,不提供任何技术服务。
本站资源仅供本地编辑研究学习参考,禁止未经资源商正版授权参与任何商业行为,违法行为!如需商业请购买各资源商正版授权
本站仅收集资源,提供用户自学研究使用,本站不存在私自接受协助用户架设游戏或资源,非法运营资源行为。
 
在线客服
点击这里给我发消息 点击这里给我发消息 点击这里给我发消息
售前咨询热线
312337667

微信扫一扫,私享最新原创实用干货

QQ|免责声明|依星源码资源网 ( 鲁ICP备2021043233号-3 )|网站地图

GMT+8, 2024-7-5 23:21

Powered by Net188.com X3.4

邮箱:312337667@qq.com 客服QQ:312337667(工作时间:9:00~21:00)

快速回复 返回顶部 返回列表