简介
WebSocket解决了使用HTTP协议所带来的不能连续接收server端状态变化的问题(如聊天场景),具体区别见下面这张图

主要区别:
- HTTP : request - response单向通信,短链接 ; WebSocket : Bi-directional messages双向通信,长链接
- Websocket在一个链接内能让server主动推送数据给client
API
参考 https://developer.mozilla.org/en-US/docs/Web/API/WebSocket
统一使用Typescript的写法
Methods
WebSocket(url:string, protocols?:string|string[])
主要的WebSocket interface , 用
new
关键字生成对象1let ws = new WebSocket("ws://localhost:3000","my-protocol")protocol
参数通过request中的Sec-WebSocket-Protocol
字段传给server, server可以根据protocol决定应该返回的response
send(data:any)
通过websocket发送
data
给server,在js中可以使用任何类型的数据close(code?:number, reason?:string)
client关闭websocket通信,
code
使用CloseEvent的标准,同时可以将自定义的信息写在reason
中。
Attributes
省略了
bufferAmount
与extensions
readyState: number
(readonly)表示client上Websocket链接状态,有4个值:CONNECTING(0), OPEN(1), CLOSING(2),CLOSED(3)。参考https://developer.mozilla.org/en-US/docs/Web/API/WebSocket#Ready_state_constants
url: string
(readonly)同
WebSocket
函数的url参数binaryType: string
表示传递的数据类型 ,
blob
或arraybuffer
onopen: (this: WebSocket, ev: Event) => any
标准的EventListener,当
readyState
变为OPEN
时调用,第二个参数为通用Event123// 两种写法ws.onopen = event => console.log(event)ws.addEventListener('open', event => console.log(event))onmessage: (this: WebSocket, ev: MessageEvent) => any
标准的EventListener,当接收server发来的消息时调用,第二个参数为MessageEvent ,写法与
onopen
类似(onerror
与onclose
不再赘述)onerror: (this: WebSocket, ev: Event) => any
标准的EventListener,当在通信过程中发生error时调用,第二个参数为通用Event
onclose: (this: WebSocket, ev: CloseEvent) => any
标准的EventListener,当
readyState
变为CLOSED
时调用,第二个参数为CloseEventprotocol
WebSocket
函数中的protocols
中的某一个特定protocol
使用
简单是实现一个基于WebSocket通信的Client - Server例子,在线代码
有部分websocket库并不支持在client上直接使用W3C WebSocket API,如WebSocket-node , Socket-io等,这里server使用Go语言的实现 gorilla/websocket
Client
|
|
Server
|
|
运行结果
Client:

Server:
