diff --git a/2024-6-13.-.md b/2024-6-13.-.md new file mode 100644 index 0000000..a96b3ad --- /dev/null +++ b/2024-6-13.-.md @@ -0,0 +1,13 @@ +# 完成的任务 + +继续增加sdserver的日志,了解项目代码逻辑,优化部分部分代码。观看GBsdk项目代码,运行example,并将安卓模拟器注册上去。 + + +# 学到了什么 +1. 向云端发送消息和接受的具体流程,其中在项目启动时,会启用两个协程writer和reader,分别监听读写,当发送消息时,先将消息内容通过chan发送到writer中,然后通过chan监听响应消息,等待时长最多30s,消息在reader中通过chan传递回来,然后回传消息。 + +2. 首先了解项目的启动流程,先配置本地的redis,在配置sip以及级联内容,在初始化各种数据库,并将数据库的内容信息cache下来,这样做保证了项目的稳定性,即使redis暂时掉线,也不影响项目的运行。服务端要及时的获取设备的上线,下线,以及设备的状态信息等,以便管理和控制设备,所以在项目中使用了各种回调函数,用于获取设备的状态消息。之后注册了路由,包括REGISTER,MESSAGE等,用于和设备交互。 + +3. 在了解到了项目的启动流程后,就要思考服务端是怎么获取到设备的通道信息的呢? +通过抓包,了解了设备的注册和注销是使用REGISTER消息通知的,通过Expire参数来控制设备的注销和注册,其中0是注销(兼容海康)。设备在注册时,我发现第一次发送的报文中,header不带有authentication 字段,导致认证失败,sdk发送401,表示未鉴权,之后设备带有authentication 字段进行二次注册,注册成功。在查阅相关文档之后发现这是正常的注册流程。 +