全部文档
OneOS简介 硬件支持 快速开发指南 编译构造工具 API参考文档 高级语言 用户编程手册 OnePos定位 应用笔记 FAQ

OneOS websocket user guide-v1.0.0

简介

我们一直使用的http协议只能由客户端发起,服务端无法直接进行推送,这就导致了如果服务端有持续的变化客户端想要获知就比较麻烦。websocket协议就是为了解决这个问题应运而生。

websocket协议,客户端和服务端都可以主动的推送消息,可以是文本也可以是二进制数据。而且没有同源策略的限制,不存在跨域问题。协议的标识符就是ws,像https一样如果加密的话就是wss

相较于HTTP,websocket有以下特点:

  • 较少的控制开销。在连接创建后,服务器和客户端之间交换数据时,用于协议控制的数据包头部相对较小。
  • 更强的实时性。由于协议是全双工的,所以服务器可以随时主动给客户端下发数据。
  • 保持连接状态。
  • 更好的二进制支持。Websocket定义了二进制帧,相对HTTP,可以更轻松地处理二进制内容。
  • 可以支持扩展。Websocket定义了扩展,用户可以扩展协议、实现部分自定义的子协议。
  • 更好的压缩效果。相对于HTTP压缩,Websocket在适当的扩展支持下,可以沿用之前内容的上下文,在传递类似的数据时,可以显著地提高压缩率。

目录结构

目录 说明
api 提供给用户的API调用接口
app websocket用户开发参考案例
doc 文档
core websocket核心目录,其中协议实现,以及数据结构定义
thirdpart 第三方开源文件

​ api:提供给用户的API调用接口。

​ app:websocket用户开发参考案例。

​ core:websocket核心目录,其中协议实现,以及数据结构定义。

​ thirdpart:第三方开源文件。

逻辑层次

​ 依赖:

  • websocket属于应用层协议,依赖传输层提供数据传输支持,在OneOS中,需要下层提供BSD socket支撑。
  • websocket握手阶段采用客户端向服务器发起一个HTTP请求,并在附加头中增加websocket消息;服务器端解析该信息后产生应答消息返回给客户端;客户端和服务器端的 websocket 连接就建立起来了,双方就可以通过这个连接通道自由的传递信息,并且这个连接会持续存在直到客户端或者服务器端的某一方主动的关闭连接。
  • websocket需要SHA等安全算法支撑。

业务流程

  • 动态创建websocket client对象:以websocket服务器端url为唯一标识符动态创建client对象,并返回文件描述符;

  • 向client对象注册事件响应函数:包括onOpen、onClose、onMessage、onError;

  • 启动client服务:包括TCP建链和websocket握手两个阶段;用户可以使用默认格式的HTTP请求头,也可以使用自定义的HTTP请求头;

  • websocket服务持续阶段:此时用户可以向服务器端发送报文,也可以在事件处理函数中响应服务器端向客户端发送的消息;

  • 停止websocket client服务:首先会将停止服务原因编码封装在消息中发送给服务器,关闭该TCP链接,并停止client任务;此时用户不能向服务器端发送报文,也无法接受服务器端向客户端发送的消息;

  • 销毁websocket client对象:释放资源,销毁对象。

配置选项

使用websocket需要通过Menuconfig的图形化工具进行配置选择,配置的路径如下所示:

(Top) → Components → Network → Protocols → Websocket → Enable Websocket Client → Websocket Client
                                            OneOS Configuration
     [*] Enable Websocket Client
        (1) The maximum number of websocket client instances
        (2048) The stack size of task
        (13) The priority level value of task
        (5) The tick of task
        (1452) The maximum number of send & rece buffer depth
        [*] Enable Websocket Client example
配置入口

​ 配置路径:Components->Network->Protocols->Websocket->Websocket Client

参数说明

​ The maximum number of websocket client instances:websocket客户端最大实例数,表示在OneOS中,最多启动websocket客户端数量;

​ The stack size of task:客户端任务栈深度,建议不做修改;

​ The priority level value of task:客户端任务优先级;

​ The tick of task:客户端任务时间片大小;

​ The maximum number of send & rece buffer depth:客户端发送/接收数据缓存深度;

​ Enable Websocket Client example: 使能websocket客户端示例程序。

注意事项

  1. 任务堆栈大小及收发缓存深度

由于在websocket涉及TCP报文收发,因此任务堆栈大小建议大于或等于2048;收发缓存大小建议与设备MTU相匹配,若MTU为1500,则其TCP报文payload为1452字节,若超过1452字节,则涉及TCP报文分片等。

results matching ""

    No results matching ""

    返回顶部