ZYB ARTICLES REPOS

AppRTC的collider代码分析

代码组织

collider的代码可以在https://github.com/webrtc/apprtc.gitsrc/collider目录找到

collider的代码一共分三个目录

.
├── collider
├── collidermain
└── collidertest

其中collidermain是主程序入口主要调用collider下的代码;collidertest的目录全是测试代码。

对于collider下的代码文件

├── client.go       负责与客户端交互
├── collider.go     程序接口
├── dashboard.go    给出统计数据
├── messages.go     消息相关
├── room.go         单个房间管理
├── roomTable.go    所有房间管理

接口

collider是通过web服务的方式对外提供三个接口

  1. /ws 这个一个websocket接口,支持注册register和发消息send两种信令,在websocket关闭的时候自动反注册
  2. /status 统计信息获取
  3. / 这个接口支持POST,DELETE两个操作,分别对应发消息,和退出房间。它们的请求路径为/$ROOMID/$CLIENTID也就是说在这个路径中包含了roomid和clientid,对于POST请求也就是发消息来说,其消息体就是http.Body,roomid和clientid是消息目的地

对于安全的保证是基于https来实现的,当然也可以使用http,如果用http的话,这些接口相当于在裸奔

房间管理

collider的roomid和clientid是一个字符串,这个字符串并没有限制长度,也没有限制一定要求是数字,结果分析至少不能包含/字符,因为这个字符在对上述URL请求的时候会被当着分隔符。

roomTable.go 总揽所有房间,管理是否需要创建,删除房间。

room.go 管理房间的客户端

client.gomessage.go 一起主要负责消息消息收发,比较简单。

整体结构如下:

roomTable:
    room:
        client-msgqueue
        client-msgqueue
    room:
        client-msgqueue
        client-msgqueue
    room:
        client-msgqueue
        client-msgqueue
    room:
        client-msgqueue
        client-msgqueue
    ...