前言 一、为什么需要 WebSocket?

初次接触 WebSocket 的人,都会问同样的问题:我们已经有了 HTTP 协议,为什么还需要另一个协议?它能带来什么好处?

答案很简单,因为 HTTP 协议有一个缺陷:通信只能由客户端发起。可以看图

举例来说,我们想了解今天的天气,只能是客户端向服务器发出请求,服务器返回查询结果。HTTP 协议做不到服务器主动向客户端推送信息。

它的最大特点就是,服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向平等对话,属于服务器推送技术的一种。

webSocket 实现小游戏_websocket

 webSocket协议 通常是ws和wss

客户端API

1.webSocket为构造函数 使用的时候需要new操作符

new WebSocket

2. readyState 状态

  • CONNECTING:值为0,表示正在连接。
  • OPEN:值为1,表示连接成功,可以通信了。
  • CLOSING:值为2,表示连接正在关闭。
  • CLOSED:值为3,表示连接已经关闭,或者打开连接失败。

3.onopen

用于指定连接成功后的回调函数

4.onclose

用于指定连接关闭后的回调函数

5.onmessage

用于指定收到服务器数据后的回调函数

6.send

方法用于向服务器发送数据

1.nodejs 通过express-ws 连接和发送给前端数据

服务端API 介绍

框架主要是express 后端长连接用的是express-ws

getWss 返回当前的连接池 

const express = require('express')
const app = express()
const ws = require('express-ws')
const wss = ws(app).getWss('/talk')




app.ws('/talk', (ws, req) => {
//console.log('success',ws)
ws.on('message', msg => {
wss.clients.forEach(w=>{
w.send(msg)
})
})
})


app.listen(9001, () => {
console.log('http://localhost:9001/talk')
})

2.前端连接后台的webSocket 进行通信

const type = prompt('请输入1位红方阵营,2位蓝色方')
let ws = new WebSocket('ws://localhost:9001/talk')
let wrpas = document.querySelectorAll('.wraps div');
ws.onopen = () => {
console.log('成功')
}
wrpas.forEach((item, index) => {
item.onclick = function () {
ws.send(JSON.stringify({
index,
type
}))
}
})
ws.onmessage = ({ data }) => {
let options = JSON.parse(data)
wrpas[options.index].style.background = options.type == 1 ? 'red' : 'blue';
}