WebScoket通信,基础知识,白嫖怪~~~~

233 阅读2分钟

1,基础中的基础

1基础

废话不多说,先来看看什么是ws webScoket以下简称ws: ws是一种协议,用于客户端和服务端相互通信。协议标识符是ws,加密则为wss

2.为什么使用ws

传统的http协议中,通信只能有客户端发起,服务端无法主动向客户端推送消息,需通过轮询方式让客户端自行获取,效率极低。

3.ws基础知识点

1-客户端

详细知识点可自行参考其他资料:或者参考 WebSocket - 文档 以下知识,只是我遇到的问题需要了解的知识和用到的知识,仅记录一下,不喜勿喷!!!! 1-基础: new WS(url) 创建ws连接 ws.onopen 连接成功,开始通信 ws.onmessage 客户端接收服务端发送的信息 ws.onclose 连接关闭后的回调函数 ws.onerror 连接失败后的回调 ws.readyState 当前连接状态 ws.close 关闭当前连接 ws.send 客户端向服务器发送消息 2:常量 open:1 closeing:2 closed:3

3:举个栗子 我们创建一个ws类,用于处理所有通讯事件

class Ws {
  constructor (url) {
    this.ws = new WebSocket(url);
  }

  initWs() {
    this.ws.onopen = () => {}
    this.ws.onmessage = (event) => {}
    this.ws.onclose = (event) => {}
    this.ws.onerror = () => {}
  }

  close() {
    this.ws.close();
  }

  send(data) {
    if (this.ws.readyState === this.ws.OPEN) {
      this.ws.send(data);
    }
  }
}

2-服务端

关于服务端可查看其他参考资料 或 这里使用ws与客户端通讯:ws - 文档

废话不多说可以看服务端代码:

import WebSocket, { WebSocketServer } from "ws";
const wss = new WebSocketServer({ port: 8080 });
const app = express();

const send = (ws, data) => { // 向客户端发送消息
  ws.send(JSON.stringify(data));
}

const broadcast = (data) => { // 向所有客户端广播消息
  wss.clients.forEach(client => {
    if (client.readyState === WebSocket.OPEN) {
      send(client, data);
    }
  });
}

wss.on('open', () => { // 连接成功的回调函数
  console.log('connected');
});

wss.on('close', () => { // 连接关闭的回调函数
  console.log('disconnected');
});

wss.on('connection', (ws) => { 
  ws.on('message', (message) => {
    // 接收客户端发的消息
  });
});

app.listen(3000, () => {
  console.log('Start Service On 3000');
});

3,调试

如何在浏览器查看ws请求呢? 其实和我们平时http请求差不多的, 打开控制台,选择netWork下的ws即可查看通讯情况

eeb126a2af4238bfc0d6562c8c93bd3.png

暂时先这么多吧,其实还有ws如何创建连接的知识展示,但是比较底层,懒得去深究,如果需要,可以自行查阅资料,

ws并不是全新协议,而是利用http协议来建立连接,可自行了解。