WebSocket概述 WebSocket是一种双向通信协议,允许客户端和服务器在单个TCP连接上进行全双工通信,即使在没有HTTP请求的情况下也是如此。WebSocket的建立需要经过HTTP握手过程,握手成功后,通信双方即可通过WebSocket协议进行数据交换。
ping和pong消息概述 ping和pong消息是WebSocket协议中定义的两种特殊消息,用于保持连接处于活动状态并检测连接是否中断。
ping消息是一个由一个字节组成的特殊消息,用来询问服务器当前的连接状态。
pong消息是一个由一个字节组成的特殊消息,用来回复ping消息,以表明服务器当前的连接状态是正常的。
WebSocket的ping和pong消息
WebSocket定义ping和pong消息,用于验证通信双方是否在短时间内发送和接收数据,从而保持连接活动的正常。当连接建立时,客户端和服务器都会定期发送ping消息,并期望在一定的时间内收到pong消息作为回应。如果在规定的时间内没有收到回复,则认为连接已中断。
ping和pong消息的使用
ping和pong消息的使用非常简单,只需在客户端和服务器端分别发送和接收即可。下面是一个演示代码:
// 客户端代码
const WebSocket = require("ws");
const ws = new WebSocket("ws://localhost:8080");
ws.on("open", () => {
console.log("WebSocket connection opened");
// 定期发送ping消息
setInterval(() => {
ws.ping();
}, 5000);
});
ws.on("message", (data) => {
if (data === "pong") {
console.log("Received pong message from server");
} else {
console.log(`Received message from server: ${data}`);
}
});
ws.on("close", () => {
console.log("WebSocket connection closed");
});
// 服务器代码
const WebSocketServer = require("ws").Server;
const wss = new WebSocketServer({ port: 8080 });
wss.on("connection", (ws) => {
console.log("WebSocket connection established");
// 定期发送ping消息
setInterval(() => {
ws.ping();
}, 5000);
ws.on("message", (data) => {
if (data === "ping") {
console.log("Received ping message from client");
ws.pong();
} else {
console.log(`Received message from client: ${data}`);
ws.send(`Received: ${data}`);
}
});
ws.on("close", () => {
console.log("WebSocket connection closed");
});
});
在上面的代码中,客户端和服务器都定期发送ping消息,并期望在一定的时间内收到pong消息作为回应。如果在规定的时间内没有收到回复,则认为连接已中断。
注意: ping和pong消息是WebSocket协议中定义的特殊消息,因此可以使用WebSocket库提供的内置方法来发送和接收这些消息。