目录
一、WebSocket的定义与标准
1、背景
WebSocket 通信协议2008年诞生,于2011年被IETF定为标准RFC 6455,并由RFC7936补充规范。WebSocket API也被W3C定为标准;是HTML5认可的一种协议,本质上是一个基于TCP的协议。它实现了浏览器与服务器全双工通信,旨在更好地节省服务器资源和带宽,并达到实时通讯的目的。
2、定义
WebSocket是一种在单个TCP连接上进行全双工通信的协议,它允许客户端和服务器之间进行双向、实时、低延迟的数据交换。它使得客户端和服务器之间的数据交换变得更加简单,并允许服务端主动向客户端推送数据。
3、标准化:
WebSocket通信协议于2011年被IETF定为标准RFC 6455,并由RFC7936补充规范。WebSocket API也被W3C定为标准。
二、WebSocket的核心特性与优势
1、全双工通信
不同于传统的HTTP请求-响应模式,WebSocket实现了双向通信。服务器可以主动推送数据到客户端,而无需客户端发起请求。
2、长连接
一旦WebSocket握手成功,连接将保持打开状态,直到显式关闭。这减少了频繁建立和销毁连接带来的开销,尤其适合需要持续通信的场景。
3、轻量级头部
WebSocket数据帧采用紧凑的二进制格式,减少了不必要的头部信息,提高了数据传输效率。在不包含扩展的情况下,对于服务器到客户端的内容,此头部大小只有2至10字节(和数据包长度有关);对于客户端到服务器的内容,此头部还需要加上额外的4字节的掩码。
4、实时性
由于数据可以直接在已建立的连接上传输,WebSocket能够实现实时或接近实时的数据交互。
5、跨域支持
与HTTP一样,WebSocket允许跨域通信,只需服务器端设置相应的CORS(Cross-Origin Resource Sharing)头。
三、WebSocket的工作原理与流程
1、握手阶段
客户端通过HTTP升级机制(Upgrade header)发送一个特殊的WebSocket握手请求到服务器。服务器如果支持WebSocket,将回应一个Switching Protocols(101)状态码,表示同意升级到WebSocket协议。
2、数据传输阶段
握手成功后,客户端和服务端开始通过已升级的TCP连接直接交换数据帧。数据帧可以承载文本、二进制数据或特定的控制消息(如关闭连接)。
3、websocket连接和http连接
(1)HTTP连接
是浏览器发起向服务器的连接,服务器预先并不知道这个连接。通常被认为是短连接(尽管HTTP1.1后默认采用keepline长连接,但本质上还是短连接),并且是无状态的。
http采用请求-响应模式,每次请求需要建立一个新的连接。由于每次请求都需要建立新的连接,所以在频繁通信的场景下可能会有较大的开销。
(2)WebSocket连接
需要浏览器和服务器握手进行建立连接。在客户端与服务器之间HTTP协议的初始握手阶段将其升级到WebSocket协议来建立连接,其底层仍是TCP/IP连接。是持久连接,具有状态,是一个有状态的双向连接。
提供了实时的、双向的通信机制,可以立即将数据从服务器推送到客户端,实现即时更新。使用更少的头部信息和保持连接的机制,减少了数据传输的开销,并通过减少每次连接的握手次数和数据包的开销,提高了通信的效率和性能。
如下图所示:
四、WebSocket的使用场景
WebSocket主要应用于需要实时、双向通信的web应用中,例如:
1、即时聊天
构建实时聊天应用,用户可以实时发送和接收消息,实现低延迟、高效的在线交流。
2、实时数据更新
实时股票行情、实时天气预报等。服务器可以实时地将最新的数据推送给客户端,客户端无需主动发起请求。
3、游戏开发
多人在线游戏中的实时状态同步、玩家交互等。
4、实时监控
监控设备的运行状态、实时监测交通流量等。
五、WebSocket的优缺点
1、优点
(1)实时性
WebSocket能够实时地双向通信。
(2)减少网络流量
相比于传统的HTTP请求响应模式,WebSocket连接只需要进行一次握手,之后就可以保持长连接,减少了网络流量和延迟。
(3)较少的开销
WebSocket使用较少的开销来维持连接。
(4)跨平台支持
WebSocket协议可以在多种平台上使用。
2、缺点
(1)兼容性问题
WebSocket协议在一些旧版本的浏览器上不被支持。
(2)服务器资源占用
由于WebSocket的长连接特性,服务器需要维护大量的连接,可能会占用较多的服务器资源。
(3)安全性问题
WebSocket连接需要特殊的安全设置,以防止恶意攻击和数据泄漏。
六、在视频监控领域中的应用
webSocket在视频监控领域的场景包括:实时视频流传输、监控数据推送、远程控制与管理、实时分析与预警以及多用户并发访问等方面。
1、实时视频流传输
(1)WebSocket的全双工通信特性使得服务器能够实时地将视频流数据推送到客户端。客户端无需频繁发起请求来获取视频帧,从而减少了网络延迟和带宽占用。
(2)视频流数据通过WebSocket连接持续传输,保证了视频内容的实时性和流畅性。
2、监控数据推送
(1)服务器端可以将监控设备的实时数据(如设备状态、监控区域信息、报警事件等)通过WebSocket主动推送到客户端。
(2)客户端可以实时接收到这些推送数据,并在界面上进行展示或触发相应的处理逻辑。
3、远程控制与管理
(1)客户端可以通过WebSocket向服务器发送控制指令,实现对监控设备的远程控制,如调整摄像头角度、切换监控画面、启动/停止录像等。
(2)服务器端接收到控制指令后,会执行相应的操作并将结果反馈给客户端。
4、实时分析与预警
(1)结合后端视频分析技术,服务器可以对视频流进行实时分析,如人脸识别、物体检测、行为分析等。
(2)当分析系统检测到异常事件(如入侵检测、异常行为识别等)时,可以通过WebSocket将预警信息实时推送到客户端,提醒用户及时关注和处理。
5、多用户并发访问
(1)WebSocket服务器可以同时与多个客户端建立连接,支持多用户并发访问视频监控系统。
(2)每个客户端都可以实时地接收到视频流数据和监控数据推送,实现多用户同时观看和管理视频监控画面的需求。
6、安全性与稳定性
(1)WebSocket通信可以通过加密(如TLS/SSL)来确保数据传输的安全性,防止视频数据被窃取或篡改。
(2)WebSocket连接的持久性特性使得视频监控数据传输更加稳定,减少了因网络波动或连接中断导致的视频卡顿或丢失现象。
七、在视频监控平台中的实际应用
1、AS-V1000视频监控平台介绍
AS-V1000是具有完全拥有自主知识产权,并为各种各种视频监控设备提供接入服务的网络产品。支持多种协议和SDK,是一款集信令网关服务、安全认证、视频接入、视频互联、云台控制、权限管理、日志管理以及管理功能为一体的网关产品。产品提供SDK和API接口,可以接入到其他视频监控平台;同时也支持国标28181协议,能够通过国标28181协议接入到第三方的视频监控平台。
产品已经运用于各种行业,包括平安城市、监狱、交通、水利、能源、社区、军队、政法、仓库、政府、教育、企业、连锁企业等。产品可以实现各种规模的平台级联与互联,对上可无缝接入上级国标监控平台或者第三方平台。
AS-V1000具有很强的接入、汇聚、和联网能力,具体如下:
支持海康、大华、宇视、华为、科达等主流品牌私有协议接入;
支持接入宇视、朗驰、索尼、巨视、TCL、凯立信等视频设备;
支持接入松下、三星、axis、博世等国外品牌设备;
支持ONVIF等方式接入网络摄像机IPC、硬盘录像机(即NVR、DVR)等;
支持国标GB/T 28181-2011、2016标准,并支持接入符合这些标准的视频监控设备;
支持通过SDK接入主流网络摄像机IPC、主流硬盘录像机(即NVR、DVR)等;
支持NAT、防火墙穿越,可在各类复杂网络环境下轻松部署;
支持多网段接入,实现不同网段IP设备接入;
可提供实时视频浏览、录像存储及回放、设备控制等应用功能,对视频流进行加密传输;
可对监控IPC、NVR、DVR进行统一管理;
支持向上级联国标平台;
提供SDK/API接口,接入到上级视频监控平台;
支持Mpeg4、 H264、H265 等多种视频格式接入;
支持 UDP、TCP 两种国标信令传输模式;
2、websocket可以实现的交互应用
Websocket可以实现客户端和服务器之间双向、实时、低延迟的数据交换,因此在视频监控平台中大有用处,包括如下功能,在web客户端可以轻松实现。
(1)实时状态显示
- 服务器端可以定期或根据事件触发,将监控设备的实时状态数据(如摄像头位置、视频流状态等)通过WebSocket连接发送给客户端。
- 客户端接收到数据后,可以实时更新页面上的状态显示。
(2)语音对讲
- 客户端和服务器都可以将语音数据(通常是经过编码的音频流)通过WebSocket连接进行传输。
- 为了实现双向语音对讲,服务器端需要能够将接收到的音频流转发给另一个客户端(或多个客户端),同时确保数据的实时性和低延迟。
- 客户端需要实现音频的采集、编码、传输、解码和播放等功能。
(3)告警联动
- 当发生告警事件(如运动检测、入侵检测等)时,服务器可以通过WebSocket连接向客户端发送告警信息。
- 客户端接收到告警信息后,可以根据需要进行相应的处理,如弹出告警窗口、播放声音提示、自动切换到告警摄像头的视频流等。
3、websocket实现的方法
(1)建立WebSocket连接:
客户端(web浏览器)使用JavaScript中的WebSocket对象或相关库(如socket.io)来尝试建立与服务器的WebSocket连接。
服务器端(如Node.js配合ws或socket.io库)监听特定的端口,等待客户端的连接请求。
客户端和服务器成功建立连接后,可以开始发送和接收数据。
(2)应用系统的数据交互和控制:
举个例子,对于实时状态显示,服务器通过websocket把设备的状态实时发送给客户端,客户端收到后,即时更新设备实时状态。其他应用系统也类似这样的处理。
(3)错误处理和重连机制:
在实际使用中,WebSocket连接可能会因为各种原因断开(如网络故障、服务器重启等)。因此,客户端和服务器端都需要实现错误处理和重连机制,以确保连接的稳定性和可用性。
4、websocket接口示例
视频监控平台ASV-1000提供websocket的API接口,如下为报警接口:
文章正下方可以看到我的联系方式:鼠标“点击” 下面的 “威迪斯特-就是video system 微信名片”字样,就会出现我的二维码,欢迎沟通探讨。