AppRTC的collider代码分析
代码组织
collider
的代码可以在https://github.com/webrtc/apprtc.git
的src/collider
目录找到
collider
的代码一共分三个目录
.
├── collider
├── collidermain
└── collidertest
其中collidermain
是主程序入口主要调用collider
下的代码;collidertest
的目录全是测试代码。
对于collider
下的代码文件
├── client.go 负责与客户端交互
├── collider.go 程序接口
├── dashboard.go 给出统计数据
├── messages.go 消息相关
├── room.go 单个房间管理
├── roomTable.go 所有房间管理
接口
collider
是通过web服务的方式对外提供三个接口
/ws
这个一个websocket接口,支持注册register
和发消息send
两种信令,在websocket关闭的时候自动反注册/status
统计信息获取/
这个接口支持POST
,DELETE
两个操作,分别对应发消息,和退出房间。它们的请求路径为/$ROOMID/$CLIENTID
也就是说在这个路径中包含了roomid和clientid,对于POST
请求也就是发消息来说,其消息体就是http.Body
,roomid和clientid是消息目的地
对于安全的保证是基于https来实现的,当然也可以使用http,如果用http的话,这些接口相当于在裸奔
房间管理
collider
的roomid和clientid是一个字符串,这个字符串并没有限制长度,也没有限制一定要求是数字,结果分析至少不能包含/
字符,因为这个字符在对上述URL请求的时候会被当着分隔符。
roomTable.go
总揽所有房间,管理是否需要创建,删除房间。
room.go
管理房间的客户端
client.go
和message.go
一起主要负责消息消息收发,比较简单。
整体结构如下:
roomTable:
room:
client-msgqueue
client-msgqueue
room:
client-msgqueue
client-msgqueue
room:
client-msgqueue
client-msgqueue
room:
client-msgqueue
client-msgqueue
...