【转】WebSocket API总结

NCU.卓越141.chenyuchao

一、检查 WebSocket 支持

var host = "ws://localhost:8080/mychat";

 var ws;

if ('WebSocket' in window) {

ws = new WebSocket(host);

else if ('MozWebSocket' in window) {

ws = new MozWebSocket(host);

else {

window.alert("浏览器不支持WebSocket");

return;

}

 

说明构造函数   var ws = new WebSocket(url,[protocols]);

url

ws(或wss)://ip:port/uri  wss是WebSocketSecure缩写

Protocols(可选)

可以使用的子协议包括 XMPP(可扩展息处理现场协议)、SOAP(

简单对象访问协议)或者自定义协议

函数异常

SECURITY_ERR

正在尝试连接的端口被阻止。

WebSocket的浏览器支持

Chrome for Android57+   Chrome16+    iOS Safari6.0+    UC Browser for Android11.4+    Firefox11+    IE10+

Samsung Internet 4+   Opera Mini None    Safari7+     Android Browser4.4+     Edge12+      Opera12.1+

 

二、WebSocket 属性和方法

   属性     

类型

描述

 

onopen

 

EventListener

服务器响应了WebSocket连接请求,open事件触发并建立了一个连接

ws.onopen = function () {

    console.log(ws);

};

 

 

 

 

 

 

 

onmessage

 

 

 

 

 

 

 

EventListener

1、接收到来自服务器的数据

//接收文本消息并显示消息内容

ws.onmessage = function (e) {

    console.log(e.data);

};

2、WebSocket还可以处理二进制数据,这种数据作为Blob消息或者ArrayBuffer消息。因为设置WebSocket消息二进制数据类型的应用会影响二进制消息,所以必须在读取数据之前决定用于客户端的二进制数据的类型

ws.binaryType = "blob";

ws.onmessage = function(e) {

if (e.data instanceof Blob) {

console.log("Blob", e.data);

           var blob = new Blob(e.data);

      }

};

 

ws.binaryType = "arraybuffer";

ws.onmessage = function(e) {

      if (e.data instanceof ArrayBuffer) {

         console.log("ArrayBuffer", +e.data);

         var a = new Uint8Array(e.data);

      }

};

 

onerror

 

EventListener

响应意外故障的时候触发,如果你接收一个 error 事件,可以预期很快就会触发 close 事件。error事件处理程序是调用服务器重连逻辑以及处理来自 WebSocket 对象的异常的最佳场所。

ws.onerror = function(e) {

    console.log(e);

};

 

 

onclose

 

 

EventListener

在WebSocket连接关闭时触发

/*

* close 事件有 3 个有用的属性(property),可以用于错误处理和恢复

* e.wasClean   布尔属性,表示连接是否顺利关闭

* e.code      表示服务器发送的关闭握手状态

* e.reason

* */

ws.onclose = function(e) {

     console.log(e);

};

url

 

由构造函数解析的URL。这是一个绝对的URL        只读

binaryType

DOMString

指示由连接发送的二进制数据的类型的字符串

bufferedAmount

unsigned long

浏览器将为你的客户端应用程序缓存出站数据,从而使你可

以随时调用 send(),发送任意数量的数据。可以使用 bufferedAmount 特性检查已经进入队列,但是尚未发送到服务器的字节数。                                  只读

extensions

DOMString

服务器选择的扩展

protocol

DOMString

指示服务器选择的子协议的名称的字符串; 这将是protocols创建WebSocket对象时在参数中指定的字符串之一。

 

 

readyState

 

 

 

unsigned short

报告连接状态                   

                特性常量                   

         值          

状态

WebSocket.CONNECTING

0

连接正在进行中,但还未建立

WebSocket.OPEN

1

连接已经建立。消息可以在客户

WebSocket.CLOSING

2

连接正在进行关闭握手

WebSocket.CLOSED

3

连接已经关闭,不能打开

只读

 

方法

描述

 

 

send()

连接打开时发送数据

function myEventHandler(data) {

   if (ws.readyState === WebSocket.OPEN) {

          ws.send(data);

   } else {

      // Do something else in this case.

   }

}

 

 

 

 

close(code,reason)

关闭连接。

参数说明

code 可选的

指示状态代码的数字值,解释连接正在关闭的原因。如果未指定此参数,则假定默认值为1000(表示正常的“事务完成”关闭)。

 

reason 可选的

一个人类可读的字符串,解释连接正在关闭的原因。该字符串必须不超过123个字节的UTF-8文本(不是字符)。

例: ws.close(1000,"正常关闭");

抛出异常

INVALID_ACCESS_ERR

code指定了无效。

SYNTAX_ERR

该reason字符串过长或包含不成对替代品。

code附录

1000          正常关闭       当你的会话成功完成时发送这个代码

1001          离开           因应用程序离开且不期望后续的连接尝试而关闭连接时,发送这一代码。服务器可能关闭,或者客户端应用程序可能关闭

1002          协议错误       当因协议错误而关闭连接时发送这一代码

1003     不可接受的数据类型  当应用程序接收到一条无法处理的意外类型消息时发送这一代码

1004          保留           不要发送这一代码。根据 RFC 6455,这个状态码保留,可能在未来定义

1005          保留           不要发送这一代码。WebSocket API 用这个代码表示没有接收到任何代码

1006          保留           不要发送这一代码。WebSocket API 用这个代码表示连接异常关闭

1007          无效数据       在接收一个格式与消息类型不匹配的消息之后发送这一代码。如果文本消息包含错误格式的 UTF-8 数据,连接应该用这个代码关闭

1008          消息违反政策    当应用程序由于其他代码所不包含的原因终止连接,或者不希望泄露消息无法处理的原因时,发送这一代码

1009          消息过大        当接收的消息太大,应用程序无法处理时发送这一代码(记住,帧的载荷长度最多为64 字节。即使你有一个大服务器,有些消息

也仍然太大。)

1010          需要扩展        当应用程序需要一个或者多个服务器无法协商的特殊扩展时,从客户端(浏览器)发送这一代码

1011          意外情况       当应用程序由于不可预见的原因,无法继续处理连接时,发送这一代码

1015      TLS失败(保留) 不要发送这个代码。WebSocket API 用这个代码表示 TLS 在 WebSocket 握手之前失败。

0 ~ 999        禁止              1000 以下的代码是无效的,不能用于任何目的

1000 ~ 2999    保留              这些代码保留以用于扩展和 WebSocket 协议的修订版本。按照标准规定使用这些代码,参见表 3-4

3000 ~ 3999   需要注册          这些代码用于“程序库、框架和应用程序”。这些代码应该在 IANA(互联网编号分配机构)公开注册

4000 ~ 4999   私有             在应用程序中将这些代码用于自定义用途。因为它们没有注册,所以不要期望它们能被其他 WebSocket广泛理解

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/436904.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

字节流转化为文件流_字节流转成字符串之后,在通过字符串转成字节流后的文件为什么会不一样?...

public static void main(String[] args) throws Exception {File sourceFile new File("/home/joy/图片/img1-lg.jpg");File tempFile new File("/home/joy/桌面/TempFile");saveTempFile(sourceFile, tempFile);String str byteToString(tempFile);Fi…

OpenGL基本运行模型

OpenGL是一种三维技术规范。 我们知道三维渲染场景需要实时计算大量数据。 这里我根据自己的经验总结出一句话: 计算机中,对性能要求高的功能模块,其运行原理必然是简单易行的! 有理由断言:OpenGL没那么难。 OpenGL工…

matlab绘制球面模型_MATLAB采用surf/surfc/surfl/surfnorm绘制球体

利用绘制球体sphere(n),展示了MATLAB中的surf,surfc,surfl,surfnorm,surface五个绘图命令。启动MATLAB,新建脚本(CtrlN),输入如下代码:close all; clear all; clcn20;[x,y,z]sphere(…

【转】浅谈TDD、BDD、ATDD、DDD的区别

四个开发模式意思: TDD:测试驱动开发(Test-Driven Development)BDD:行为驱动开发(Behavior Driven Development)ATDD:验收测试驱动开发(Acceptance Test Driven Development&#x…

【OSG】OSG运行模型

关于运行模型 OSG中的类很多,只看OSG代码,很难把各个类串联起来。 我们知道面向对象程序的运行模型是:对象对象间协作。 单纯看代码,多数情形下,只能了解程序中有哪些对象,而不知道它们是如何协作的&…

用姓名字段统计人数_基于 Wide amp; Deep 网络和 TextCNN 的敏感字段识别

数据治理 (Data Governance) [1]作为一种数据管理的重要一环,主要目的在于保证数据在整个生命周期内的高质量性。数据治理的核心包括:数据的可用性 (Availability),易用性 (Usability),一致性 (Consistency),完整性 (I…

【转】C# HttpWebRequest 异常时获取 HttpWebResponse 数据

使用 C# 的 HttpWebRequest 请求接口如果接口返回了 401 则会抛出异常,而 401 其实也有可能返回正常的响应数据,如何获取异常时的响应流? 解决方案 捕获 WebException 异常,通过 ex.Response 获取 HttpWebResponse 主要代码如下…

innodb下的mvcc_从InnoDB了解MVCC

原标题:从InnoDB了解MVCCMVCC全称是Multi-Version Concurrency Control,即多版本并发控制。这是种很常用的技术,现在几乎所有的关系数据库都支持它。平时它默默工作,像个透明人,似乎不用关心它的细节。但是当我们偶尔在…

【开箱即用】VMware Win7虚拟机下载

前言 在桌面软件开发中,特别是Qt开发过程中,通常需要测试目标软件在不同版本的Windows上是否能够正常运行,以提高软件的系统兼容性。 虽然微软在2020年正式停止对Windows 7系统的支持,并鼓励用户升级Win10,但是由于W…

【转】C# Stream篇(—) -- Stream基类

目录: 什么是Stream? 什么是字节序列? Stream的构造函数 Stream的重要属性及方法 Stream的示例 Stream异步读写 Stream 和其子类的类图 本章总结 什么是Stream? MSDN 中的解释太简洁了: 提供字节序列的一般视图 (我可不想这么理解…

【已解决】解决Win7安装VS2013/VS2015结束时报错“无法建立到信任根颁发机构的证书链”的问题

问题描述 最近在Win7虚拟机上上安装VS,等待许久之后,提示安装完成。但是完成界面报错: “无法建立到信任根颁发机构的证书链”。 而且错误还不少,如下图所示: 根据我的个人经验,证书问题并没有影响日常开…

python把矩阵堆叠成大矩阵_python numpy 矩阵堆叠实例

在实际操作中,遇到了矩阵堆叠的操作,本来想着自己写一个函数,后来想,应该有库函数,于是一阵找寻import numpy as npa np.array([1,2,3])b np.array([4,5,6])np.stack((a,b)) #默认行堆叠输出:array([[1, …

【转】C# Stream篇(二)TextReader 和StreamReader

目录: 为什么要介绍 TextReader? TextReader的常用属性和方法 TextReader 示例 从StreamReader想到多态 简单介绍下Encoding 编码 StreamReader 的定义及作用 StreamReader 类的常用方法属性 StreamReader示例 本章总结 为什么要介绍 TextReade…

【数据结构】能看懂的红黑树

1 总体逻辑 1.2 二叉树 二叉树中&#xff0c;一个根节点最多有两个子节点。 1.3 二叉排序树 Binary Search Tree 二叉排序树是一个排好序的二叉树。且水平方向来看&#xff0c;总有 左节点 < 右节点 简单记忆其规律&#xff0c;可以在脑海中想象一个大大的小于号&#x…

【转】C# 数据流详解(FileStream、MemoryStream、NetworkStream等类)

本文章内容主要为数据流及相关辅助类&#xff1a; 流(Stream)、文件流(FileStream)、内存流(MemoryStream)、网络流(NetworkStream)、加密流(CryptoStream)以及文本读写的StreamReader、StreamWriter、用于二进制读写的BinaryReader和BinaryWriter类等。 对FileStream、Memor…

Linux命令英文全拼及含义解释

最近在做Linux开发。不同于使用Windows系统&#xff0c;使用linux开发经常会使用各种命令来和系统交互&#xff0c;特别是在偏嵌入式的环境下&#xff0c;没有GUI&#xff0c;就会更加依赖命令交互。 Linux命令通常是单词缩写&#xff0c;想要更好的记忆这些命令&#xff0c;最…

node工程默认url_node命令行工具之实现项目工程自动初始化的标准流程

一、目的传统的前端项目初始流程一般是这样&#xff1a;可以看出&#xff0c;传统的初始化步骤&#xff0c;花费的时间并不少。而且&#xff0c;人工操作的情况下&#xff0c;总有改漏的情况出现。这个缺点有时很致命。甚至有马大哈&#xff0c;没有更新项目仓库地址&#xff0…

【转】!C#中的Stream相关

计算机文件基本上分为二种&#xff1a;二进制文件和 ASCII&#xff08;也称纯文本文件&#xff09;。图形文件及文字处理程序等计算机程序都属于二进制文件。这些文件含有特殊的格式及计算机代码。ASCII 则是可以用任何文字处理程序阅读的简单文本文件&#xff0c;由一些字符的…

音频帧AVFrame::linesize大于实际值的问题记录

在解析AAC的音频流时&#xff0c;发现AVFrame::linesize[0]大小为8192。 但是AVFrame::nb_samples为1024&#xff0c;AVFrame::format类型为AV_SAMPLE_FMT_FLTP&#xff0c;即每个采样是4字节。 那么此音频帧中的数据应该为4096&#xff0c;和AVFrame::linesize[0]不相等。 …

vscode生成vue模板快捷键_vs code 快速生成vue 模板

1.使用快捷Ctrl Shift P唤出控制台&#xff0c;然后输入snippets并选择。(或 文件>首选项>用户代码片断里面&#xff0c;输入 vue.json &#xff0c;然后回车 )(或 file > Preferences > User Snippets&#xff0c;然后回车)2.接着输入vue&#xff0c;选择vue-ht…