5

即时通讯(IM)开源项目OpenIM重构版本发布- v2.0.0

 2 years ago
source link: https://studygolang.com/articles/35541
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

即时通讯(IM)开源项目OpenIM重构版本发布- v2.0.0

OpenIM · 4天之前 · 194 次点击 · 预计阅读时间 8 分钟 · 大约8小时之前 开始浏览    

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架构重构 https://mmbiz.qpic.cn/mmbiz_jpg/ia65kDbIF6AKerHCcHYZfjBubJCQPnuWHQjwU6WMybFeCGYnJJhRCxBgzoSmmU8TQX0rNrSFIMwx5Cv6hCAyAyA/640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1&wx_co=1

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发送响应,通知响应到达;

模块对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 https://mmbiz.qpic.cn/mmbiz_png/ia65kDbIF6AKerHCcHYZfjBubJCQPnuWHHjzLm3Cnia97ExdsnWIicLZKyDiacPd1oBuTUMHwQhXbMmtgQOyLzDKiaw/640?wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1 db字段调整

好友申请表老版本 https://mmbiz.qpic.cn/mmbiz_png/ia65kDbIF6AKerHCcHYZfjBubJCQPnuWHz6otCwc5EO5OkomZguy4eszUY2FG7BnSQlyB2XpzDBtmO6v08TD2xg/640?wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1 好友申请表新版本 https://mmbiz.qpic.cn/mmbiz_png/ia65kDbIF6AKerHCcHYZfjBubJCQPnuWHw1ic2TWQYt0n0E3ke1posIbicmicH4EX7TU7fZmibIDgqicdGY2jgtrHXmQ/640?wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1

以好友申请表为例,(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

https://mmbiz.qpic.cn/mmbiz_png/ia65kDbIF6AKerHCcHYZfjBubJCQPnuWHpZky3YeS4OSQU1W6byjOQjPtzq4MeXLHogfbj3sZWoDtoVEIWKUVBw/640?wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1 在api层有server_api_params

https://mmbiz.qpic.cn/mmbiz_png/ia65kDbIF6AKerHCcHYZfjBubJCQPnuWHpZky3YeS4OSQU1W6byjOQjPtzq4MeXLHogfbj3sZWoDtoVEIWKUVBw/640?wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1 在rpc层有proto

https://mmbiz.qpic.cn/mmbiz_png/ia65kDbIF6AKerHCcHYZfjBubJCQPnuWH4oI1lV2j4IPl8FOddKFZSKOHnqGWIKUs0bFwTibpYwNaH1mwEjybbicg/640?wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1 离线推送配置化

在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的基石。

https://mmbiz.qpic.cn/mmbiz_png/ia65kDbIF6AKerHCcHYZfjBubJCQPnuWHmsx6u2w6WBzfibDmfdE1dupqd2kER4vu6dgXLE3M5ZL5w1DaGibXkxFQ/640?wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1 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版本。


有疑问加站长微信联系(非本文作者))

280

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:701969077


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK