WebSocket是一种在单个TCP连接上进行全双工通信的协议(客户端可以给服务端发送,反之服务端也可以给客户端发送),很多网站为了实现推送技术,所用的技术都是轮询。轮询是在特定的时间间隔(如每1秒),由浏览器对服务器发出HTTP请求,然后由服务器返回最新的数据给客户端的浏览器。这种传统的模式带来很明显的缺点,即浏览器需要不断的向服务器发出请求,然而HTTP请求可能包含较长的头部,其中真正有效的数据可能只是很小的一部分,显然这样会浪费很多的带宽等资源。
WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在WebSocket API中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。以下用代码实例来说明:
//jsconst ws=new WebSocket("ws://localhost:8081/sock") ws.onopen=()=>{ console.log("connecting") ws.send("hello") } ws.onmessage=(e)=>{ console.log("get",e,e.data) }
使用node开启一个服务,先初始化然后创建:
npm init -ynpm install express --save //安装expressnpm install ws --save //安装websocket
安装好的package.josn如下:
{ "name": "serve", "version": "1.0.0", "description": "", "type": "module", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1", "start": "node index.js" }, "keywords": [], "author": "", "license": "ISC", "dependencies": { "cors": "^2.8.5", "express": "^4.18.2", "ws": "^8.14.2" }}
开启一个服务
import express from "express"import cors from "cors";import http from "http";import {WebSocketServer} from "ws"var app = express(); // app.use(cors()) //解决跨域 const server=http.createServer(app) const wss=new WebSocketServer({server}) wss.on('connection',(ws)=>{ console.log("conn") ws.send("hello ws") setInterval(()=>{ ws.send("数据变化"+new Date()) },1000) ws.on('message',(message)=>{ console.log('client'+message); }) }) app.get('/', function (req, res) { res.send('Hello World');}) app.get("/sock",(req,res)=>{ res.send(new Date()) }) server.listen(8081)
领取专属 10元无门槛券
私享最新 技术干货