Page 266 - Web性能权威指南
P. 266
每个视图都以父缓冲、开始字节偏移量和要处理的元素数作为参数,其中偏移量
根据之前字段的大小计算。结果,ArrayBuffer 和 WebSocket 实际上为我们在浏览
器中处理二进制数据提供了所有必要的工具。
17.1.3 发送文本和二进制数据
建立了 WebSocket 连接后,客户端就可以随时发送或接收 UTF-8 或二进制消息。
WebSocket 提供的是一条双向通信的信道,也就是说,在同一个 TCP 连接上,可以
双向传输数据:
var ws = new WebSocket('wss://example.com/socket');
ws.onopen = function () {
socket.send("Hello server!"); ➊
socket.send(JSON.stringify({'msg': 'payload'})); ➋
var buffer = new ArrayBuffer(128);
socket.send(buffer); ➌
var intview = new Uint32Array(buffer);
socket.send(intview); ➍
var blob = new Blob([buffer]);
socket.send(blob); ➎
}
➊ 发送 UTF-8 编码的文本消息
➋ 发送 UTF-8 编码的 JSON 净荷
➌ 发送二进制 ArrayBuffer
➍ 发送二进制 ArrayBufferView
➎ 发送二进制 Blob
WebSocket API 可以接收 UTF-8 编码的 DOMString 对象,也可以接收 ArrayBuffer、
ArrayBufferView 或 Blob 等二进制数据。但要注意,所有二进制数据类型只是为了简
化 API:在传输中,只通过一位(bit)即可将 WebSocket 帧标记为二进制或者文本。
假如应用或服务器需要传输其他的内容类型,就必须通过其他机制来沟通这个信息。
这里的 send() 方法是异步的:提供的数据会在客户端排队,而函数则立即返回。特
别是在传输大文件的时候,千万别因为返回快,就错误地以为数据已经发送出去
了!要监控在浏览器中排队的数据量,可以查询套接字的 bufferedAmount 属性:
WebSocket | 255