WebSocket简介
WebSocket是一种网络传输协议,可在单个TCP连接上进行全双工通信,位于OSI模型的应用层。
特点
- TCP连接,与HTTP协议兼容
- 双向通信,主动推送(服务端向客户端)
- 无同源限制,协议标识符是ws( 加密wss)
应用场景
- 聊天,消息,点赞
- 直播弹幕、评论
- 游戏、协同编辑、基于位置的应用
前端库
- 【推荐】ws(实现原生协议,特点: 通用、性能高,定制性强)
- socket.io(向下兼容协议,特点:适配性强、性能一般
创建 WebSocket 服务端
新建文件夹 server,终端运行
cnpm init -y
初始化项目
安装 ws 库
cnpm i -S ws
新建项目启动文件 server\index.js
const WebSocket = require("ws"); // 在指定端口上,创建WebSocket服务 const wss = new WebSocket.Server({ port: 3001 }); // 客户端连接到服务器的回调 wss.on("connection", function connection(ws) { console.log("一个客户端已连接"); // 服务端接收客户端的消息 ws.on("message", function (msg) { console.log("服务端接收到来自客户端的消息:" + msg); }); // 服务端发消息给客户端 ws.send("你好,客户端,我是服务端!"); });
启动项目
node server/index.js
创建 WebSocket 客户端
方法1:使用原生WebSocket
在html的js中执行
var ws = new WebSocket("ws://127.0.0.1:3001");
即可与WebSocket服务器建立连接
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>Document</title> </head> <body> <script> // 与服务端建立WebSocket长连接 var ws = new WebSocket("ws://127.0.0.1:3001"); // 客户端发送消息给服务端 ws.onopen = function () { ws.send("你好,服务端,我是客户端!"); }; // 客户端接收到服务端的消息 ws.onmessage = function (event) { console.log(event.data); }; </script> </body> </html>
方法2:使用ws
新建文件夹 client,终端运行
cnpm init -y
初始化项目
安装 ws 库
cnpm i -S ws
新建项目启动文件 client\index.js
// 导入ws库 const WebSocket = require("ws"); // 与服务端建立WebSocket长连接 const ws = new WebSocket("ws://127.0.0.1:3001"); ws.on("open", function () { console.log("node客户端成功连接到服务器"); // 客户端发送消息给服务端 ws.send("你好,服务端,我是node客户端!"); // 客户端接收到服务端的消息 ws.on("message", function (msg) { console.log("node客户端接收到服务端的消息:" + msg); }); });
启动项目
node client/index.js