企业视频远程通话会议系统EasyRTC应用接口管理模块Go模块方案介绍

一、方案介绍

EasyRTCGo 为EasyRTC的一个模块,为应用接口管理模块,是一个使用 Go 语言开发的独立软件。该软件主要为网页端、APP端和小程序端提供RESTful接口,并同EasyRTC的视频直播转发模块和视频会议模块进行通信。该软件在整个系统中起到承上启下的作用,同多端进行交互,因此需要进行一个比较适合的架构设计。该软件的架构设计图如下所示:

1006.png

EasyRTCGo从上到下分为四层:API层、Service层、Manager层和Dao层。

  • API层

为前端提供RESTful接口。收到前端信息后,调用下层处理后,将结果返回给前端。

  • Service层

业务逻辑服务层,针对业务逻辑进行处理。如获取视频会议信息,一部分信息时存储在底层数据库中,一部分实时信息是在视频会议模块中。因此Service层会调用Dao层和Manager层获取对应的信息,综合处理后返回给API层。

  • Manager层

管理层,主要同第三方接口进行通信。如从视频直播转发模块获取对应的直播信息,从视频会议模块获取会议在线状态及会议成员信息。

  • Dao层

数据访问层,同底层数据库进行交互。如用户信息均存储在数据库中,因此主要通道Dao层进行用户的增删改查操作。

二、层与层之间设计方案

EasyRTCGo中分为四层,一般上层不需要关心底层的实现方式,因此采用接口隔离的方式对层与层进行设计。

以视频会议为例:

Dao层为对于数据库的增删改查接口,设计如下:

// 对于视频会议表的操作
type VMeetDao interface {
    Add(vc *do.TVideoMeet) (*do.TVideoMeet, error)
    Delete(id uint) (bool, error)
    Update(vc *do.TVideoMeet) (*do.TVideoMeet, error)
    Get(id uint) (*do.TVideoMeet, error)
    GetByTaskID(taskID string) (*do.TVideoMeet, error)
    // 获取部分,从 offset 条开始,读取 limit 数量的数据
    GetParts(groupID, like, sort, order string, offset, limit uint) (*[]*do.TVideoMeet, uint, error)
    // 获取所有
    GetAll(order string) (*[]*do.TVideoMeet, error)
    // 获取所有数量
    Count() (uint, error)
    // 获取所有数量
    CountGroupIdDatas(groupID string) (uint, error)
}

接口的实现方式如下:

扫描二维码关注公众号,回复: 11434787 查看本文章
// 视频会议表的实现
type VMeetDaoImpl struct {
}

func (impl *VMeetDaoImpl) Add(vc *do.TVideoMeet) (*do.TVideoMeet, error) {
    vc.UpdateAt = etime.Now()
    err := impl.fromTable().Create(vc).Error
    return vc, err
}

Service层不关心Dao层的实现,直接引用接口,使用方式如下:

var meetDao dao.VMeetDao = dao.GetMeetDao()
videoMeetDO, err := meetDao.Add(videoMeet)

此种设计方式符合接口隔离原则,在接口不变的情况下,Dao层的实现可以任意修改,Dao层与Service层无更多的耦合,代码更健壮更易维护。其余接口均参考此种设计。

EasyRTC会议播放效果界面:

EasyRTC.png

猜你喜欢

转载自blog.csdn.net/TsingSee/article/details/107528752