介绍
OpenIM开发团队破费了2个月工夫,加班加点对代码进行了部分重构,优化代码构造,标准代码开发流程,为社区将来深度参加开发打好根底。因为改变较大,波及大量的测试工作,并且还有打包 公布 等一些琐碎的事件,导致公布延期了十天,在此略表歉意。后续会建设绝对残缺的开发和公布打算,也邀请各位社区同学参加OpenIM的建设工作。有志于参加OpenIM建设的同学,能够与我私聊,介绍零碎架构,并探讨社区开发流程和标准。
因为波及到数据库字段变动,下载前要先删除app把历史数据全副清理洁净
web端体验地址:
http://121.37.25.71:23232/
pc端下载:
https://pan.baidu.com/s/16MW3... 明码: 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/#/l...
账号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/...
有劳敌人们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/...
服务端和SDK要放弃大版本统一,即版本号的第一位数字统一。OpenIM团队不再反对v1.0版本,请大家更新到v2.0版本。