File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -11,16 +11,47 @@ sidebar_position: 6
1111- 如果需要增加IM的能力,可以参考以下流程,并提交PR,以保证未来代码统一性。
1212
1313
14- ## Server
15-
16- ### rpc功能添加
17-
18-
19- ### api功能添加
20-
21-
22-
23- ## Sdk
14+ ## 服务器
15+ > OpenIMServer主要分为长短连接接口,长连接接口主要是IM消息的核心逻辑(逻辑入口位于/internal/msggateway),短连接接口主要是IM的
16+ 业务逻辑(逻辑入口位于/internal/api/),下面具体介绍如何在IM中加上新的业务功能。
17+
18+
19+ ### 1、开发前提
20+ - 搭建环境
21+ - 搭建Go环境,参考[ Go官方文档] ( https://golang.org/doc/install )
22+ - 搭建grpc环境,参考[ grpc官方文档] ( https://grpc.io/docs/languages/go/quickstart/ )
23+ + fork OpenIMServer依赖的外部仓库
24+ - clone官方的后台协议仓库: github.com/openimsdk/protocol
25+
26+ ** 注** :IMServer使用的protobuf协议以依赖仓库的形式在github.com/openimsdk/protocol中,如果需要修改协议,需要先fork protocol仓库,
27+ 然后在此仓库上增加新的接口协议,然后在OpenIMServer的go.mod中引用新的协议通过:
28+
29+ ` replace github.com/openimsdk/protocol => ./your_protocol_path `
30+ ### 2、协议增加与生成
31+ - 编写proto文件,定义新的接口协议
32+ - 生成go代码
33+ - proto编辑完毕后在克隆的protocol仓库中直接执行` gen.cmd ` 或者` gen.sh ` 即可生成go代码
34+ ### 3、api功能添加
35+ - 在/internal/api/router.go文件中增加新的接口包括定义路由,如果增加的接口属于一个路由组,可直接增加到对应的路由组文件中,否则模仿创建新的路由组文件。
36+ - 在/internal/api/xxx.go中如果api的json请求和rpc的request请求一致,可以直接调用a2r.Call函数,否则需要自己解析json请求,然后调用grpc接口(可模仿SendMessage接口)。
37+ ### 4、rpc功能添加
38+ ```
39+ 举例:在/internal/rpc/group/group.go中增加新的rpc函数,使用groupServer结构体实现对应的grpc的server接口,然后编写主体业务逻辑,其中涉及db更新
40+ 插入操作需要下发sdk实时通知,可直接模仿 g.notification.GroupApplicationAgreeMemberEnterNotification这种类型的通知下发函数(sdk对应需要处理新的通知)
41+ ```
42+ ### 5、存储层接口增加
43+ > 存储层主要分为三层
44+ - controller:主要用于数据库事务处理和cache整合的逻辑控制层
45+ - cache:主要为db的数据缓存
46+ - database:数据持久化层,用于业务逻辑的存储
47+ ```
48+ - 在pkg\common\storage\controller中增加新的接口,实现对应的接口,提供给rpc逻辑层调用。
49+ - 在pkg\common\storage\cache中增加新的接口,(pkg\common\storage\cache\cachekey中存储了缓存所有的key前缀)实现对应的接口,
50+ 提供给controller层调用。
51+ - 在pkg\common\storage\model中可定义数据库的model结构体,pkg\common\storage\database中增加新的接口,实现对应的接口,提供给cache层整合。
52+ ```
53+
54+ ## 客户端
2455
2556
2657
You can’t perform that action at this time.
0 commit comments