IM-Server 即时通信技术分享

Open-IM概述--时不我待,拥抱趋势

        OpenIM是一个即时通讯解决方案。它提供了一系列的开源库、协议、API和Web客户端,帮助企业、开发者和组织快速搭建、部署和运营即时通讯应用。     OpenIM采用了protocol buffer作为通讯协议,该协议是一种基于XML的协议,用于实现即时通讯、在线状态、文件传输等功能。OpenIM还支持WebRTC技术,可以实现音视频通话和会议功能。     OpenIM提供了易于集成和定制的API和SDK,支持多种平台和语言,如iOS、Android、Web等。     市面上的即时通信厂商百花齐放,包括网易云信,腾讯即时通信,环信,融云等等,私有化部署几万至几十万不等。     OpenIM的优势----开源。

系统架构

服务端-App-应用服务器的关系

用户注册

用户登陆

消息网关

        消息接入层,采用websocket协议接入,服务模块无状态,柔性伸缩,运维简单。通过MQ让业务模块之间解耦,消息写入MQ即表示发送成功。 (1)负责用户连接管理,保持长连接,存储uid->conn映射关系; (2)负责消息接收落地,成功写入MQ后给客户端返回成功;

消息转发

        消息处理rpc,作为消费者从MQ中消费(读取)消息,递增接收者收件箱seq, 关联seq和msg,并存储到mongodb。全量历史消息无收件箱概念,消息作为 流水记录落地mysql即可,两者通过协程独立处理,双方互不影响。msg作为 无状态服务节点,如果消息量增加,可以启动冗余节点服务,加快消息处理流程。 (1)负责消费MQ中的消息,作为消费者,实时感知新信息达到,并触发回调逻辑; (2)读取receiver userId,并通过redis的incr操作递增服务端对应的seq; (3)关联seq和msgid,并存入以receiver userid为key的mongodb中; (4)把消息作为历史记录存入mysql中,作为消息备份

上面是openim-server的架构及流程介绍,在这个基础上,基于该开源项目的二次开发~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
即时通信IM是一种用于在应用程序中实现实时消息传递的技术。根据提供的代码,我可以看到您正在使用uniapp框架来实现IM功能。 首先,根据的代码,您可以在登录页的登录事件中编写以下代码来实现IM登录: ```javascript let tim = this.$TIM.create({SDKAppID: '你的SDKAppID'}); // 创建TIM实例 tim.setLogLevel(0); // 设置日志级别 tim.registerPlugin({'tim-upload-plugin': this.$TIMUploadPlugin}); // 注册插件 let promise = tim.login({userID: '你的userID', userSig: '你的userSig'}); // 发起登录请求 promise.then(function(imResponse) { console.log(imResponse.data); // 登录成功 if (imResponse.data.repeatLogin === true) { console.log('即时通讯登录成功',imResponse.data.errorInfo); // 标识账号已登录 } }).catch(function(imError) { console.log('即时通讯login error:', imError); // 登录失败 }); ``` 然后,根据的代码,您可以在退出页或app.vue组件的onHide钩子函数中编写以下代码来实现IM退出: ```javascript let tim = this.$TIM.create({SDKAppID: 1400504461}); // 创建TIM实例 tim.logout(); // 执行退出操作 ``` 接下来,根据的代码,您可以在需要监听新消息的地方编写以下代码: ```javascript import TIM from 'tim-js-sdk'; // 引入TIM SDK import TIMUploadPlugin from 'tim-upload-plugin'; // 引入上传插件 Vue.prototype.$TIM = TIM; // 将TIM挂载到Vue原型上 Vue.prototype.$TIMUploadPlugin = TIMUploadPlugin; // 将上传插件挂载到Vue原型上 ``` 最后,根据您的需求,您可以使用以下代码来拉取会话列表: ```javascript let promise = tim.getConversationList(); // 拉取会话列表 promise.then((imResponse) => { const conversationList = imResponse.data.conversationList; console.log('会话列表',conversationList); }).catch((imError) => { tim.registerPlugin({'tim-upload-plugin': this.$TIMUploadPlugin}); // 注册插件 tim.login({userID: '你的userID', userSig: '你的userSig'}); // 重新登录 console.log(imError); // 获取会话列表失败 }); ``` 综上所述,您可以根据以上代码在uniapp中实现即时通信IM功能。请确保您已正确配置相关参数(如SDKAppID、userID和userSig)以及下载所需的SDK文件。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值