WebSocket API

本文详细介绍了WebSocket API的功能,包括创建和管理连接的方法、属性及其状态。此外还提供了如何使用WebSocket进行客户端编程的示例。

WebSocket 对象提供了一组用于创建和管理 WebSocket 连接,以及可以通过该连接发送和接收数据的 API。

WebSocket构造器方法接受一个必须的参数和一个可选的参数:

WebSocket WebSocket(in DOMString url, in optional DOMString protocols);
WebSocket WebSocket(in DOMString url,in optional DOMString[] protocols);

参数EDIT

url

表示要连接的URL。这个URL应该为响应WebSocket的地址。

protocols 可选

可以是一个单个的协议名字字符串或者包含多个协议名字字符串的数组。这些字符串用来表示子协议,这样做可以让一个服务器实现多种WebSocket子协议(例如你可能希望通过制定不同的协议来处理不同类型的交互)。如果没有制定这个参数,它会默认设为一个空字符串。

构造器方法可能抛出以下异常:

SECURITY_ERR

试图连接的端口被屏蔽。

方法概述EDIT

void close(in optional unsigned long code, in optional DOMString reason);
void send(in DOMString data);

属性EDIT

属性名类型描述
binaryTypeDOMString

一个字符串表示被传输二进制的内容的类型。取值应当是"blob"或者"arraybuffer"。

"blob"表示使用DOMBlob 对象,而"arraybuffer"表示使用 ArrayBuffer 对象。

bufferedAmountunsigned long调用 send() 方法将多字节数据加入到队列中等待传输,但是还未发出。该值会在所有队列数据被发送后重置为 0。而当连接关闭时不会设为0。如果持续调用send(),这个值会持续增长。只读
extensionsDOMString服务器选定的扩展。目前这个属性只是一个空字符串,或者是一个包含所有扩展的列表。
oncloseEventListener用于监听连接关闭事件监听器。当 WebSocket 对象的readyState 状态变为 CLOSED 时会触发该事件。这个监听器会接收一个叫close的CloseEvent 对象。
onerrorEventListener当错误发生时用于监听error事件的事件监听器。会接受一个名为“error”的event对象。
onmessageEventListener一个用于消息事件的事件监听器,这一事件当有消息到达的时候该事件会触发。这个Listener会被传入一个名为"message"的MessageEvent 对象。
onopenEventListener一个用于连接打开事件的事件监听器。当readyState的值变为 OPEN 的时候会触发该事件。该事件表明这个连接已经准备好接受和发送数据。这个监听器会接受一个名为"open"的事件对象。
protocolDOMString一个表明服务器选定的子协议名字的字符串。这个属性的取值会被取值为构造器传入的protocols参数。
readyStateunsigned short连接的当前状态。取值是 Ready state constants之一。 只读
urlDOMString传入构造器的URL。它必须是一个绝对地址的URL。只读

常量EDIT

Ready state 常量

这些常量是 readyState 属性的取值,可以用来描述 WebSocket 连接的状态。

常量描述
CONNECTING0连接还没开启。
OPEN1连接已开启并准备好进行通信。
CLOSING2连接正在关闭的过程中。
CLOSED3连接已经关闭,或者连接无法建立。

方法EDIT

close()

关闭WebSocket连接或停止正在进行的连接请求。如果连接的状态已经是closed,这个方法不会有任何效果

void close(in optional unsigned short code, in optional DOMString reason);
参数

code 可选

一个数字值表示关闭连接的状态号,表示连接被关闭的原因。如果这个参数没有被指定,默认的取值是1000 (表示正常连接关闭)。 请看CloseEvent页面的 list of status codes来看默认的取值。

reason 可选

一个可读的字符串,表示连接被关闭的原因。这个字符串必须是不长于123字节的UTF-8 文本(不是字符)。

可能抛出的异常

INVALID_ACCESS_ERR

选定了无效的code。

SYNTAX_ERR

reason 字符串太长或者含有unpaired surrogates。

注意: 在Gecko中,Gecko 8.0 (Firefox 8.0 / Thunderbird 8.0 / SeaMonkey 2.5)之间的版本的实现不支持任何参数。

send()

通过WebSocket连接向服务器发送数据。

void send(in DOMString data);
void send(in ArrayBuffer data);
void send(in Blob data);
参数

data

要发送到服务器的数据。

可能抛出的异常

INVALID_STATE_ERR

当前连接的状态不是OPEN

SYNTAX_ERR

数据是一个包含unpaired surrogates的字符串。

注意: Gecko 6.0实现的send()方法与规范的要求有一些不同。Gecko会返回一个 boolean表示连接是否依然处于开启状态 (并且这个数据被成功放入的发送队列或者被发送)。在 Gecko 8.0中这个问题被修正了。

到了 Gecko 11.0,实现了接受 ArrayBuffer的参数的方法,但接受 Blob数据类型的方法没有被实现。

示例EDIT

// Create WebSocket connection.
const socket = new WebSocket('ws://localhost:8080');

// Connection opened
socket.addEventListener('open', function (event) {
    socket.send('Hello Server!');
});

// Listen for messages
socket.addEventListener('message', function (event) {
    console.log('Message from server', event.data);
});

规范EDIT

规范状态注释
The WebSocket API
WebSocket
Candidate Recommendation初始定义

浏览器兼容性EDIT

 

 

  • Desktop
  •  
  • Mobile
特性ChromeFirefox (Gecko)Internet ExplorerOperaSafari
基础支持(Yes)4.0 (2.0)(Yes)(Yes)?
Sub-protocol support?6.0 (6.0)???

 

[1] 从Gecko 6.0开始,构造器含有前缀,你需要调用MozWebSocket(): var mySocket = new MozWebSocket("http://www.example.com/socketserver");

extensions 属性直到Gecko 8.0才被支持。

在 Gecko 11.0之前,用send()方法发送的数据被限制在16MB以内。现在数据大小可以达到2 GB。

另见EDIT

转载于:https://my.oschina.net/u/3053883/blog/899946

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值