最近读了 openstf 的源代码,从开始完全没有头绪到现在简单的操作可以快速找到相应代码,并能进行简单的改造,收获颇深,下面以 openstf 的手机占用流程为例,分析源代码的构成,希望对其他对 openstf 源码感兴趣的同学有帮助,不正确的地方也欢迎了解的同学指正
首先如 stf 官方文档给出的整个架构总共分成 app、api、websocket、processor、device、provider、triproxy 这样几个模块,每个模块具体的功能如下:
1、app 模块:使用的 ArgularJs,mvc 模型,主要用于前端的显示、逻辑处理和发起请求,http 与 socket 请求
2、api 模块:独立于前端页面的 api 接口模块,对外提供 http 接口返回手机列表信息、占用手机等,可以直接提供给第三方系统,采用了 swagger 框架,具体 api 接口可以参考官网文档
3、websocket 模块:主要用于与前端的通信,会和数据库进行简单的交互
4、processor 模块:负责后端功能逻辑的处理,在手机占用中主要接收手机的消息并根据不同的消息做不同的响应处理,返回给前端
5、triproxy 模块:代理模块,目前了解的功能中暂时没有特别大的作用,只是代理转发的作用
6、provider 模块:管理手机的接入,将手机与其他模块连接打通
7、device 模块:这个模块的进程启动时机比较特殊,并非部署的时候人工启动,而是 provider 进程 fork 出的子进程,在手机接入的时候
下面就是手机占用各个模块的交互流程
1、app 发起 group.invite 字符串
2、websocket 模块接收字符串并发送封装 GroupMessage 消息进行发送(消息采用 PB 的协议封装)
3、device 模块接收 GroupMessage 消息进行占用判断
4、唤醒设备中 service 进程
5、合理情况下发送 JoinGroupMessage 消息通知
6、processor 模块接收 JoinGroupMessage 消息进行数据库处理
7、发送到 websocket 模块通知前端 device.change 消息
8、app 接收到更新界面上状态的显示
具体 app 前端与后端交互的流程图参考如下:
手机占用 api 接口的流程图参考如下:
个人觉得 stf 的代码逻辑非常清晰,不过始终有一点不明白,为什么作者一定要用 nodejs 而不用其他的方式来实现呢?