即时通讯(IM)开源项目OpenIM重构版本发布- v2.0.0
介绍
OpenIM开发团队花费了2个月时间,加班加点对代码进行了局部重构,优化代码结构,规范代码开发流程,为社区未来深度参与开发打好基础。由于改动较大,涉及大量的测试工作,并且还有打包 发布 等一些琐碎的事情,导致发布延期了十天,在此略表歉意。后续会建立相对完整的开发和发布计划,也邀请各位社区同学参与OpenIM的建设工作。有志于参与OpenIM建设的同学,可以与我私聊,介绍系统架构,并探讨社区开发流程和规范。
由于涉及到数据库字段变化,下载前要先删除app把历史数据全部清理干净
web端体验地址:
http://121.37.25.71:23232/
pc端下载:
https://pan.baidu.com/s/16MW36rKVFtDCBewMOdD0pA 密码: jd15
安卓下载:
https://www.pgyer.com/OpenIM
iOS下载:审核中 稍后更新
新版本有哪些更新
客户端SDK架构重构
WsConn:
ws连接管理器。提供函数供其他方调用,具体包括:
(1)ws连接服务端,和OpenIM服务端保持长连接;
(2)关闭ws连接;
(3)通过ws发送请求;
WsRespAsyn:
ws请求-响应同步器,因为ws是异步处理,需要把请求和响应关联起来,提供函数供其他方调用(消息发送,心跳发送,拉取历史消息等)
(1)getCh:为每个请求生成一个channel和msgIncr,使用map关联起来 msgIncr->channel
(2)notifyResp:对于ws收到的每个响应,通过msgIncr找到channel,并往channel发送响应,通知响应到达;
Ws:
模块对WsConn 和 WsRespAsyn功能进行整合(1)请求响应同步化,提供函数SendReqWaitResp,调用者通过ws发送请求后,等待此请求的响应达到。(2)对于接收到的推送消息,把消息写入PushMsgAndMaxSeqCh channel,触发MsgSync消息同步协程。
具体实现:ReadData协程:接收服务端ws数据,并根据收到的数据类型(心跳、推送、踢出登录、拉取历史消息等),触发不同的逻辑处理,(1)对于主动发送请求的响应,则调用WsRespAsyn的notifyResp响应触发接口;(2)对于push消息,写入PushMsgAndMaxSeqCh ,触发MsgSync消息同步协程。
MsgSync:
消息同步器;包含Ws 和conversationCh 、 PushMsgAndMaxSeqCh ,启动消息同步协程,对PushMsgAndMaxSeqCh 中的读取的数据做处理,具体包括:
(1)从PushMsgAndMaxSeqCh 读取服务端最大seq:SvrMaxSeq(由heartbeat写入的),对比本地最大seq:LocalMaxSeq和服务端最大seq: SvrMaxSeq,计算出缺失的seq,从服务器拉取历史消息,放入conversationCh ,触发conversation协程处理;
(2)从PushMsgAndMaxSeqCh 读取ws推送消息(由Ws的ReadData写入的推送消息),如果消息中的seq+1==LocalMaxSeq,则写入conversationCh,触发conversation处理,否则从服务端拉取消息补齐[LocalMaxSeq+1, seq],放入conversationCh ,触发conversation协程处理;
heartbeat:
心跳管理器,包括MsgSync
(1)心跳协程,从服务端定时获取最大seq:SvrMaxSeq,然后把SvrMaxSeq让入PushMsgAndMaxSeqCh ,触发MsgSync消息同步协程。
管理后台第一版发布
管理后台第一版体验地址:
http://121.37.25.71:22331/#/login
账号openIM123456
密码openIM1
db字段调整
好友申请表老版本
好友申请表新版本
以好友申请表为例,(1)统一并规范字段命名;(2)增加更多字段,可以实现更多的业务场景,同时增加扩展字段。
同样其他表都全部进行了规范:用户表,好友关系表,,群组表,群成员表,群申请表,黑名单表等
通知机制完善
通知机制完善,可以实现多端同步,实时更新本端以及其他端的本地db。比如移动端设置好友备注,会实时同步到pc端,同样pc端设置完好友备注,会实时同步到移动端,并更新本地db。具体实时同步通知包括:从用户资料修改,到关系链建立,到群组的全方位通知机制。
//
NotificationBegin = 1000
FriendNotificationBegin = 1200
FriendApplicationApprovedNotification = 1201
FriendApplicationRejectedNotification = 1202
FriendApplicationNotification = 1203
FriendAddedNotification = 1204
FriendDeletedNotification = 1205
FriendRemarkSetNotification = 1206
BlackAddedNotification = 1207
BlackDeletedNotification = 1208
FriendNotificationEnd = 1299
ConversationOptChangeNotification = 1300
UserNotificationBegin = 1301
UserInfoUpdatedNotification = 1303
ConversationNotification = 1307
ConversationNotNotification = 1308
UserNotificationEnd = 1399
GroupNotificationBegin = 1500
GroupCreatedNotification = 1501
GroupInfoSetNotification = 1502
JoinGroupApplicationNotification = 1503
MemberQuitNotification = 1504
GroupApplicationAcceptedNotification = 1505
GroupApplicationRejectedNotification = 1506
GroupOwnerTransferredNotification = 1507
MemberKickedNotification = 1508
MemberInvitedNotification = 1509
MemberEnterNotification = 1510
GroupNotificationEnd = 1599
NotificationEnd = 2000
开发流程规范
IM能力从客户端sdk->api->rpc,每层都有自身的协议,协议文档通过包集中管理,方便文档生成。比如在sdk层有sdk_params_callback
在api层有server_api_params
在rpc层有proto
离线推送配置化
在sdk发送消息函数中提供单条消息的离线推送的配置能力
SendMessage(callback open_im_sdk_callback.SendMsgCallBack, message, recvID, groupID string, offlinePushInfo string, operationID string)
offlinePushInfo是个json string,他是title, desc, ex三元组,开发者可以自行设置具体内容。目前采用极光推送,需要开发者在极光申请相关key,并在后台配置。
MinIO支持
服务端配置项如下
bucket: openim
location: us-east-1
endpoint: http://127.0.0.1:9000
accessKeyID: minioadmin
secretAccessKey: minioadmin
客户端sdk在初始化时需要传入相关参数"object_storage":“minio”
InitSDK(listener open_im_sdk_callback.ConnListener, operationID string, config string)
config是json字符串,格式为
{
“platform”:1,
“api_addr”:“http://127.0.0.1:10000”,
“ws_addr”:“ws://127.0.0.1:17778”,
“data_dir”:"./",
“log_level”:6,
“object_storage”:“minio”
}
其他
还包括合并转发消息bug修复,seq拉取机制完善,发送中、发送失败状态对齐,退出登录状态清理,会话及消息的容错能力等等。
下一步计划
(1)社区开发规范发布,社区开发者能深度参与OpenIM开发,从新业务开发、bug修复,到架构优化等全方位介入,共同提高OpenIM的稳定性、性能,把OpenIM打造成IM开源社区的领跑者。
(2)第三方callback机制完善,从功能角度来看,回调可以分为四大类:
用户在线状态变化回调
好友关系链变化回调
单聊消息回调
群组变化系统回调
从处理角度来看,回调可以分为以下两大类:
事件发生之前回调:回调的主要目的在于让 App 业务后台可以干预该事件的处理逻辑,OpenIM Server 会根据回调返回码确定后续处理流程(例如发送群消息之前回调)。
事件发生之后通知:回调的主要目的在于让 App 业务后台实现必要的数据同步。
项目情况
官方文档:https://doc.rentsoft.cn/
github地址:https://github.com/OpenIMSDK/Open-IM-Server
有劳朋友们github点一下 star,一个小小的 star 是作者们前进的动力,也是我们力争开源IM项目No1的基石。
OpenIM不是个人兼职项目, 是商业化全职团队运作,大家可以放心使用,SDK和Server都可免费试用,无需授权。项目star增长迅速,达到6.5k,微信群开发者4000人。
商业版本是OpenIM技术团队在100%开源的OpenIM服务端和IMSDK基础上,开发的功能完整的、带有UI界面的IM产品。可以直接部署运营,也可以在此基础上二次开发。商业版本已经开源,需要商业授权,请遵守开源协议。
docker已更新,请拉取最新镜像,docker部署常见问题总结分析和解决办法 见文档:https://doc.rentsoft.cn/demo/server_deploy/docker_singe.html
服务端和SDK要保持大版本一致,即版本号的第一位数字一致。OpenIM团队不再支持v1.0版本,请大家更新到v2.0版本。
即时通讯(IM)开源项目OpenIM重构版本发布- v2.0.0相关推荐
- # 重要-即时通讯IM开源项目OpenIM关于版本管理及v2.3.0发布计划
越来越多的客户把OpenIM用到了生产环境,由于新特性持续迭代和bug修复,会涉及到后续的升级方案,为了让大家后续从容应对,本文重点总结OpenIM对未来版本管理的思路和方案.同时,官网对于文档进行了 ...
- 即时通讯(IM)开源项目OpenIM本周版本发布- v1.0.7-web端一键部署
介绍 OpenIM:由前微信技术专家打造的基于 Go 实现的即时通讯(IM)开源项目,包括IM服务端和客户端SDK.开发者私有化部署,基于SDK二次开发,可以轻松替代第三方IM云服务,打造具备聊天.社 ...
- 收藏-即时通讯(IM)开源项目OpenIM-功能手册
OpenIM简介 OpenIM是由IM技术专家打造的开源即时通讯组件,也是目前最受欢迎的开源IM项目之一,目前github star近万.开发者通过集成OpenIM组件,并私有化部署服务端,可以将即时 ...
- IM开源项目OpenIM部署文档-从准备工作到nginx配置
IM开源项目OpenIM部署文档-从准备工作到nginx配置 2022-11-14 22:27·OpenIM 一.准备工作 运行环境 linux系统即可, Ubuntu 7.5.0-3ubuntu1~ ...
- 环信开源计划开启即时通讯云开源平台时代
12月22日,在"首届移动社交创新价值峰会"上,环信即时通讯云(http://www.easemob.com)发布了被称为"4X100计划"的<环信开源平 ...
- 即时通讯:XMPP项目实践-微聊
即时通讯系列阅读 即时通讯基础 即时通讯:XMPP基础 即时通讯:XMPP项目实践-微聊 Smack类库最好的学习资料 1. 项目简介 做一个类似QQ 的通讯工具,要求有注册.登录.添加好友.添加分组 ...
- 基于Linux下的即时通讯聊天室项目(全代码 有注释 可直接运行)
基于Linux下的即时通讯聊天室项目 一.序言 二.具体功能 三.系统客户要求 四.具体代码 1.服务器代码 2.客户端代码 一.序言 最近在写一个基于Linux下的聊天工具 它适合于局域网内所有人进 ...
- 即时通讯(IM)开源项目OpenIM每周迭代版本发布-音视频实时通话-v2.0.4
介绍 OpenIM每周五发布新版,包括新特性发布,bug修复,同时合并PR 由于2.0版本重构完毕,架构更清晰,代码更规范,先邀请各位参与OpenIM社区建设,包括技术开发,技术分享等,特性开发,性能 ...
- 恩布企业即时通讯软件,EntboostChat 1.4.2发布,iOS开源IM
为什么80%的码农都做不了架构师?>>> 恩布企业即时通讯软件,iOS苹果开源手机客户端 EntboostChat 发布 1.4.2 版本. EntboostChat 是 iO ...
最新文章
- 【SVN】在阿里云上创建svn服务器
- 201671010417 金振兴 词频统计软件项目报告
- ubuntu部署eclipse兼容性问题
- 生物计算:SIR模型笔记
- 2009年下半年信息系统项目管理师上午试题分析与解答文档
- 用C#编写ActiveX控件
- JQuery常用的代码片段
- 计算机在盲童音乐教学中的具体应用,计算机在高校中的具体应用
- linux 命令行模式下,浏览网页方法
- 【Python】Python一些有趣而基础的知识(结合Java进行对比)
- ubuntu安装kali工具包
- 递归二叉树的序列打印
- android手机视频,安卓手机视频加密软件
- Java后台+微信小程序实现推送 “服务通知”
- 什么叫CDN回源和域名回源,如何采用正确的正确的回源策略
- ERP实施顾问职业所具备的知识和能力结构的几个建议
- Logic unifying接收器 绑定与取消 重新关联
- PyCharm 4.5 激活码
- 快速安装到安卓手机软件
- 友价商城源代码插件汇总
热门文章
- 共享打印机HP1022在客户端打印的时重启打印服务器才能打印
- libcurl.dll丢失怎么办?有没有什么丢失修复方法推荐?
- windows计划任务所遇到的闪退、触发器没有按时执行的坑
- java ssssss,Javasssist的简单使用
- 博客分享】优秀的有趣的博客
- linux系统分区加密,Linux系统的几种加密
- 【Linux】4.0进程控制
- 前端HTML、CSS学习完整笔记(中上篇)
- 计算机网络技术专业的英文名称,计算机网络技术专业,computer network major,音标,读音,翻译,英文例句,英语词典...
- linux 内核 fork,Linux fork()一个进程内核态的变化