WebSocket协议API简介

WebSocket为Web应用程序保留了我们所喜欢的HTTP特性(URL、安全性、基于数据模型的消息和内置的文本支持),同时提供了其他网络架构和通信模式。其是异步的,可作为高级协议(消息、聊天、服务通知等)的传输层。

每一个WebSocket连接都始于一个HTTP请求(参见Websocket原理简介),与一般请求类似,但包含一个特殊的首标-Upgrade。

 


WebSocket API

WebSocket API是纯事件驱动,消息和事件将在服务器发送时异步到达客户端;即只要连接打开,应用程序就可简单地监听事件。

WebSocket通过一个URL(以ws://或wss://开始)和一个可选的protocols(上层消息协议或协议列表,如XMPP、STOMP)参数构造。

var ws=new WebSocket("ws://www.websocket.org")

通过回调函数(on***),即可调度4个不同的事件:

  • open:服务器响应了WebSocket连接请求后;标示连接已建立,可收发数据了;

  • message:包含来自服务器的数据,可以是文本或二进制(Blob、ArrayBuffer);

  • error:意外故障时触发;

  • close:连接关闭时触发;事件中包含三个属性:

    • wasClean:表示连接是否顺利关闭,若由服务器端close引起,则为true;

    • code与reason表示服务器发送的关闭握手状态;

 

WebSocket两个方法

  • send:发送一条消息(文本或二进制);若连接无效或关闭,则抛出异常;

  • close:关闭连接或连接尝试;可传递code与reason两个参数;关闭代码:

    • 0~999:禁止使用(无效);

    • 1000~2999:保留(WebSocket协议使用);

      • 1000:正常关闭;

      • 1001:离开;

      • 1002:协议错误;

      • 1003:不可接受的数据类型;

      • 1007:无效数据;

      • 1008:消息违反政策;

      • 1009:消息过大;

      • 1010:需要扩展;

      • 1011:意外情况;

      • 1015:TLS失败;

    • 3000~3999:需要注册,用于‘程序库、框架或应用程序’,需要在IANA公开注册;

    • 4000~4999:私有,自定义用途;

 

WebSocket对象特性

  • readyState:报告连接状态:

    • 0:CONNECTING,连接正在进行中;

    • 1:OPEN,连接已建立;

    • 2:CLOSING,连接正在关闭握手;

    • 3:CLOSED,连接已关闭;

  • bufferedAmount:已进入缓冲队列(send完成),但还未发送到服务端的字节数;

  • protocol:服务端与客户端的协商结果,若没有则为空;

 

消息格式

消息在线路上是以‘组帧(framing)’表示,消息一般只有一个帧,但可由任意数量的帧组成:

WebSocket帧头包括:

  • 操作码:指定消息载荷类型(4bit)

    • 1:文本消息

    • 2:二进制消息

    • 8:关闭握手

    • 9:ping

    • 10:pong

  • 长度:使用可变位数编码帧长度;

  • 解码文本:8位UCS转换格式(UTF-8)编码;

  • 屏蔽:浏览器发向服务器的内容,进行‘屏蔽’已混淆其内容;

  • 多帧消息:通过fin位处理多帧消息或流化消息(最后一个帧fin为1);

 

STOMP/WS(STOMP over WebSocket)

STOMP即Simple (or Streaming) Text Orientated Messaging Protocol,面向简单(或流化)文本的消息传递协议,它提供了一个可互操作的连接格式,允许STOMP客户端与任意STOMP消息代理(Broker)进行交互。STOMP协议由于设计简单,易于开发客户端,因此在多种语言和多种平台上得到广泛地应用。

 

 

 

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值