我目前正在研究用C语言编写的REST API。我希望听到关于我当前架构的第二意见以及如何重构它。
所以基本上它是一个音频流平台,有两种类型的呼叫 - 同步和异步。我们正在janus上构建它,更具体地说是audiobridge插件。
问题:我们当前的janus_audiobridge
文件变得太大,很难通过它导航(单个文件中大约5K行代码)。所以我决定重构一次。
我目前的解决方案及其存在的问题:我的想法是将同步和异步调用分成两个单独的文件。这样,用于混合音频和rtp转发的所有内容都将位于主janus_audiobridge
文件中,并且实际端点将是单独的。
但是这种方法的问题是同步/异步调用仍然使用主janus_audiobridge
文件中的结构和静态变量。所以我必须将它们传递给处理程序方法。这很难看。
您如何构建这种系统?
谢谢!
答案 0 :(得分:1)
一个快速而肮脏的解决方案是将变量声明为正常的两个源文件之一,并在另一个文件中将其声明为extern。这样两个文件都可以引用相同的变量,但只有一个声明。
在我看来,更好的方法是看看其他库如何处理这个问题。函数调用的第一个参数通常是指向内部结构的指针,该结构包含您将放入全局的所有信息。这为大多数函数添加了一个参数,但它只是一个指针。这避免了声明全局变量的问题,并使您的代码可以在一个进程中同时为不同的上下文(多个客户端或多个端点)重用。