为了保持WebSocket稳定的长连接,在建立连接后,服务器和客户端之间需要通过心跳包来保持连接状态,以防止连接因长时间没有数据传输而被切断.
心跳包是一直特殊的数据包,它不包含任何实际数据,仅用来维持连接状态.
const http = require('http');
const WebSocket = require('ws');
const server = http.createServer();
const wss = new WebSocket.Server({ server });
wss.on('connection', (socket)=>{
console.log('ws连接已经打开!');
socket.on('message',(message)=>{
console.log('收到消息'+message);
socket.send('Hola');
});
socket.on('close',()=> {
console.log('ws连接已关闭');
});
});
server.on('request',(request,response)=>{
response.writeHead(200, {'Content-Type':'text/plain'});
response.end('Hola');
});
server.listen(8800,()=>{
console.log('服务器已启动,服务端口为8800');
});
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>test-demotitle>
head>
<body>
<button onclick="sendMsg()">发送消息button>
body>
<script>
const socket=new WebSocket("ws://localhost:8800")
socket.onopen=function(event) {
console.log("连接建立")
};
socket.onmessage=function(event){
console.log("收到消息:"+event.data)
};
socket.onclose=function(event){
console.log("连接已关闭")
};
function sendMsg(){
socket.send("hello!")
};
script>
html>
在请求头中带上了Upgrade,服务器也响应成功
当客户端点击"发消息"后,在消息中可以看到客户端发送了Hello.服务器回复了Hola
在console中也能看到服务器返回内容