二、SIP应用服务开发: 注册心跳管理

SIP协议的本质是协商,基于这种通信协议,通信双方需要直接或者间接获得对方的接口(一般就是地址和端口)。因此,需要在系统中保存和管理各种设备的接口信息,以便能完成正常的通信。在GB/T 28181中,这种需求通过SIP协议的REGISTERMESSAGE消息来实现。

其中,REGISTER消息用来进行设备或者系统(下级平台)的注册处理,其携带事先约定的信息通过挑战式注册(两次注册:第一次上级平台回复401消息并携带认证参数;第二次注册携带处理后的认证参数)的方式完成接口信息提交(第二个REGISTER消息中的CONTACT字段携带下级平台的接口地址和端口)。这里,在最后一条200 OK消息中,上级平台会携带当前的系统时间,用以下级平台的校时处理(但,设备不一定具备系统校时功能,可采用DVR或者NVR的间接校时)。国标中对于注册间隔(即过期注册时间)没有做明确的规定,但是,一般取expires=3600(秒),即一小时。此外,刷新注册(即会话内注册),必须保持call-id, from/to tag的一致,否则上级平台会将注册消息判定为初始注册(替代原有注册,可能导致上下线的操作)。只有当下级平台感知自己离线的情况下(注册消息上级回复403或者心跳消息上级回复3次408),才应发起初始注册。

如果在规定的注册间隔中,上级平台没有接收到下级平台的刷新注册消息,那么会导致下线操作。为了避免网络延迟和处理带来的延迟,下级平台应适当提前刷新注册的时间(例如,expires=3600时每隔3590秒注册一次)。注:不可太过频繁的进行注册(例如,1分钟注册一次),否则可能会被有黑名单的上级平台屏蔽导致一段时间无法正常通信,这是上级平台的保护措施。

同样,心跳消息用于更细粒度的检测下级平台或者设备的健康状况。心跳消息一般以1分钟为时间间隔,由下级平台或者设备向上级平台发送。这里,如果是设备,并且包含子设备,例如,DVR或者NVR,其子设备由于不直接和平台进行注册,状态应由父设备向平台报送,采用心跳消息中扩展的INFO字段来完成(每次都携带离线子设备列表在父设备心跳当中,没有携带的子设备默认在线)。心跳消息用来检测离线的默认规则是3次心跳回复408消息,即3分钟内连续3次心跳都没有成功即判定离线。

注册心跳是GB/T 28181的基础功能,按照协议进行正常的注册和心跳是其他功能的保障。设备或者平台频繁的上下线会导致一系列的重复操作,浪费大量的计算资源。目前,也有意见是取消REGISTER消息,直接使用心跳MESSAGE来完成该功能,正在商讨中。

你可能感兴趣的:(sip)