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
   261   262   263   264   265   266   267   268   269   270   271