websocket
来源:互联网 发布:豆瓣fm for mac打不开 编辑:程序博客网 时间:2024/06/05 18:04
websocket
websocketAPI
这里只介绍web端的api,想要查看它的属性方法,最简单的方式就是创建一个实例对象,然后在控制台中查看它的详情
1.创建一个socket实例
var socket = new WebSocket("url"[,[]]);//这里要注意的是url必须是绝对url,如:ws://www.xxxx.com/index.html也可以是wss://第二个可选参数是字符串或者数组,每个字符串都应代表一个子协议名称,而服务器只能接受数组中通过的一个子协议。访问 WebSocket 对象的 protocol 属性可确定接受的子协议。
同源策略对websocket不适用,因此可以通过它打开任何站点的链接。至于是否能够通信完全取决于服务器,对方通过握手信息可以知道请求源。
websocket没有readystatechange事件,但是可通过观察实例对象的readystate属性值来确定其状态。
2.属性介绍
readystate
socket.readystate == 0 //正在建立连接 == 1 //已经建立连接 == 2 //正在关闭连接 == 3 //已经关闭连接
binaryType
WebSocket 可以接收二进制讯息。接收的二进制帧可以是 Blob 或 ArrayBuffer 格式。要指定收到的二进制数据的格式,可将 WebSocket 对象的 binaryType 属性设为“blob”或“arraybuffer”。默认格式为“blob”。
socket.binaryType = arraybuffer //设定值(一般不用设定该属性)
bufferedAmount
设计应用程序时,你可能想要检查发往服务器的缓冲数据量,特别是在客户端应用程序向服务器发送大量数据的时候。尽管调用send()是立即生效的,但是数据在互联网上的传输却不是如此。浏览器将为你的客户端应用程序缓存出站数据,从而使你可以随时调用send(),发送任意数量的数据。然而,如果你想知道数据在网络上传送的速率,WebSocket对象可以告诉你缓存的大小。你可以使用bufferedAmount特性检查已经进入队列,但是尚未发送到服务器的字节数。这个特性报告的值不包括协议组帧开销或者操作系统、网络硬件所进行的缓冲。
专家提示 你可以在试图关闭连接之前检查对象的bufferedAmount特性,确定是否有些数据还没有从应用中发送到服务器。
protocol
客户端和服务器协议协商的结果可以在WebSocket对象上看到。protocol特性包含在打开握手期间WebSocket服务器选择的协议名,换句话说,protocol特性告诉你特定WebSocket上使用的协议。protocol特性在最初的握手完成之前为空,如果服务器没有选择客户端提供的某个协议,该特性保持空值。
extensions
WebSocket 的另一个新增功能是扩展。利用扩展,可以发送压缩帧、多路复用帧等。您可以检查 open 事件后的 WebSocket 对象的 extensions 属性,查找服务器所接受的扩展。
onclose,onopen,onerror
这三个事件在连接生命周期的不同阶段触发。
open//在成功建立连接时触发error//在发生错误时触发,连接这时是断开的close//连接关闭时触发
需要注意的是websocket不支持dom2级事件监听器,因此必须使用dom0级语法分别定义每个事件处理程序。如:
sockket.onclose = function(event) { console.log(event) event.wasClear :boolean //是否明确关闭 event.code //服务器返回的数值状态码 event.reason //服务器发回的消息}
这三个事件中只有close事件的event有额外信息。它有三个额外属性,各属性值如上方注释。
onmessage
当接收到服务器发来的消息时会触发该事件
socket.onmessage = function(event) { var data = event.data; ...}
send,close
send方法是客户端发送信息的命令。
var message = { name:'xiaoqiang', age:1}socket.send(JSON.stringify(message));
close是客户端关闭连接的命令
socket.close();
调用close方法后,readystate也会相应变化。
需要注意的是websocket的send方法和onmessage中的数据都是字符.串,使用时按需调用JSON.parse和JSON.stringify。
至于没找到想看的就去看socket.io吧,其它方法都是插件封装的,原生语法只有这些。
- WebSocket
- WebSocket
- WebSocket
- websocket
- WebSocket
- WebSocket
- WebSocket
- WebSocket
- websocket
- websocket
- WebSocket
- WebSocket
- WebSocket
- WebSocket
- websocket
- websocket
- websocket
- websocket
- 线程池原理解析
- 计算机设计思想 —— 解耦(分离)与内聚
- 微信小程序之兼容问题
- python:1:数字类型相关函数
- 三个Java多线程循环顺序周期打印1-75个数
- websocket
- 分享下学习Kotlin的历程-开始写逻辑吧 if/for/while/when
- 各种传感器知识
- Unity_JsonUtility_085
- css样式
- hashcode(),equals()方法分析
- 欢迎使用CSDN-markdown编辑器
- JAVA中JSP的会话跟踪(一)
- 大数据预科班4