https://github.com/agoraio-extensions/agora-rtm-server-sdk-go
https://github.com/agoraio-extensions/agora-rtm-server-sdk-go
Last synced: about 1 year ago
JSON representation
- Host: GitHub
- URL: https://github.com/agoraio-extensions/agora-rtm-server-sdk-go
- Owner: AgoraIO-Extensions
- Created: 2025-04-16T12:53:09.000Z (about 1 year ago)
- Default Branch: main
- Last Pushed: 2025-05-09T09:42:41.000Z (about 1 year ago)
- Last Synced: 2025-05-09T10:40:20.474Z (about 1 year ago)
- Language: Go
- Size: 21 MB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# agora-rtm-sdk go
支持的os:
linux + mac
备注: mac下建议只做为开发环境,不做运行环境
使用事项:
[x]不要在回调函数中,调用sdk的api
[x]不要在回调中,做耗时的操作
需要设置:
在项目目录下面:
for Linux:
export LD_LIBRARY_PATH=./third_party/agora_rtm_sdk_c/
for mac:
export DYLD_LIBRARY_PATH=./third_party/agora_rtm_sdk_c/
编译过程:
手动编译:
go build -o ./bin/ ./cmd/example/
脚本编译:
./scripts/build.sh
执行:
./bin/example
版本历史记录:
20250428 release 0.0.4
-- 更新:更新rtm 版本到2.2.4.1
-- 修改:修改mac 的LDflags,fix mac下编译错误
20250424 release 0.0.3
-- Add:
- 增加对mac的支持
20250424 release 0.0.2
## RTM SDK Version
The RTM SDK version has been updated from 2.1.x to 2.2.x.
## Library Files
The library files have been updated to use `.so` files instead of `.a` files.
## Library File Location
All `.so` files are now located in a single directory.
## add 8 callback for logout etc
## add pushmessage in demo to do like echo server
## add chan in demo to get time for each step
最佳实践
1、释放顺序
- 先释放client,再释放channel
2、回调中,不要调用sdk的api,否则会引起多次销毁
3、回调中,不要做耗时的操作,否则会引起阻塞
4 configure 最后释放
Todo list
-[]回调中,缺少logout的callback
-[]cmd/sample中需要做释放
-[]需要做pprof测试,
-[]验证cpu、内存耗费
-[]验证释放有内存泄漏?
-[] 需要修改rtmclient的对象,变更为go中的对象,否则会引起多次销毁
-[] 对mac的支持
-[] 所有的void 都用handle来定义,不要定义各种不同的c_Ixx ,太难理解了
-[] eventhandler: 需要提供一个unreg 方法,或者就是在client的logout的时候,自动来处理??需要查看rtm c++是否有unreg event handler
- [x] 将github 去掉,或者是替换为agora io,看看是否能编译通过?
- [x] 包命令为agrtm
- [x] 将bridge 迁移到agora,不需要bridage,并修改main.go
- [x] 修改scripts下面的build.sh
- [x] 将目录结构做改变,不用那么复杂。更新后的目录结构为:
1. 整体结构符合 Go 标准项目布局:
- `cmd/`: 存放主要的应用程序入口,也就是sample 的目录
- `pkg/`: 存放可以被外部应用程序使用的库代码,也就是rtm的go实现代码
- `third_party/`: 存放agora_rtm_sdk有关的include和lib文件。其中:
- `agora_rtm_sdk_c/`:存放的是c api 的include 和.a 文件
- `agora_rtm_sdk_c/agora_rtm_sdk/`:存放的是rtm_sdk 有关的highlevel API和so文件
- `scripts/`: 存放构建和部署脚本
- `bin/`: 存放编译后的可执行文件
2. 主要组件:
- `cmd/example/`: 示例应用程序
- `pkg/agora/`: Agora RTM SDK 的核心实现
- `third_party/agora_rtm_sdk_c/`: C 语言版本的 Agora RTM SDK
3. 代码组织特点:
- 接口和实现分离:`pkg/agora/` 目录下的文件都以 `I` 开头表示接口
- 功能模块化:将不同功能(如 Client、Service、Storage 等)分离到不同文件
- 清晰的依赖关系:通过 `third_party` 目录管理外部依赖
4. 构建系统:
- 使用 `go.mod` 进行依赖管理
- 使用 `scripts/build.sh` 进行构建
- 输出目录为 `bin/`
5. 文档:
- `README.md` 提供项目说明
建议改进:
1. 可以添加 `internal/` 目录存放私有代码
2. 可以添加 `api/` 目录存放 API 定义
3. 可以添加 `test/` 目录存放测试代码
4. 可以添加 `docs/` 目录存放详细文档
5. 可以添加 `configs/` 目录存放配置文件模板
这个项目结构是一个典型的 Go 项目,遵循了 Go 社区的最佳实践,适合作为其他 Go 项目的参考。
- [ ] 在c api工程中,更新c API的命名规范,更新为agora_rtm_xxx_,
- [ ] c api命名规范更新后,更新go 中的对应c api