Open cyfyifanchen opened 3 months ago
对于 go 语言集成 Agora RTM/RTC 的一些问题需要讨论和确定
x86_64
架构支持arm64
架构支持,但略微小于 x86_64
架构的版本CGO_CFLAGS
、CGO_LDFLAGS
、LD_LIBRARY_PATH
等参数unsafe
、指针类型强制转换、非托管内存的使用,代码可靠性降低Good research, let's look into it.
對於 go 語言整合 Agora RTM/RTC 的一些問題需要討論和確定
- 目前 Agora RTM SDK 只有
x86_64
架構支援- 目前 Agora RTC SDK 有
arm64
架構支援, 但略微小於x86_64
架構的版本
RTC/RTM SDK 有其他的 arch 支持, 有需求的话, 可以看怎么满足.
- 引入 cgo 導致對現有的 CI/CD , 指令碼及文件 的破壞
- 建構過程, 偵錯過程, 運行過程更複雜, 需要設定
CGO_CFLAGS
,CGO_LDFLAGS
,LD_LIBRARY_PATH
等參數- 大量
unsafe
, 指針類型強制轉換, 非託管記憶體的使用, 程式碼可靠性降低
以上三点是同一件事, 只要想把 C/C++ codes 引入到 go, 那势必引入 cgo. 引入 cgo 势必需要处理 CGO_xxx 这些参数以及代码的复杂性, 这些是写 cgo 下原本需要处理的事情, 因此触碰到 cgo 是 go programming 里面比较进阶的一环.
感觉你的想法会有两种作法:
用 go 开发一个 ASTRA extension, 内含 C/C++ 的 SDK => 这个会需要开发者自行处理 cgo 的部份, 至少包含原 post 中的最后这三个复杂性需要开发者自行处理.
用 C++ 开发一个 ASTRA extension, 内含 C++ 的 SDK => 纯 C++ 开发, 甚至不需要包 C wrapper, 就直接纯 C++ 开发即可.
用 go 开发另一个 ASTRA extension, 内含纯用 go 写的 "业务" 代码, 不涉及任何的 cgo.
而这两个 ASTRA extension 之间透过 ASTRA 的 interface 交互即可, 原本 1 extension 想要达到的功能, 2 extensions 都可以达到. 相当于 cgo 的所有复杂性, performance handling, 多语言的安全交互等等, 全由 ASTRA 完成.
这么好的讨论不如直接 convert 过去。
我需要了解下如何开发 ASTRA extension
现有的 Agora RTC extension 已经实现了使用声网的信道传输text_data
,新增 RTM2 extension 对于目前来说似乎没有太大意义,但可以作为一种额外的数据接入方式来丰富生态
@Lensual