WebSocket的优缺点

WebSocket的优缺点

1. WebSocket概念

1.1 WebSocket优点

  1. 低延迟
  2. 全双工
  3. 长期运行
  4. 双向实时通信

1.2 什么是心跳机制

为了保持WebSocket稳定的长连接,在建立连接后,服务器和客户端之间需要通过心跳包来保持连接状态,以防止连接因长时间没有数据传输而被切断.

心跳包是一直特殊的数据包,它不包含任何实际数据,仅用来维持连接状态.

1.3 WebSocket的限制

  1. 不提供加密功能.可以使用ssl或者设置白名单
  2. 不支持老版本的浏览器
  3. 需要对长连接进行维护

2. WebSocket简单代码实现

2.1 服务端

  1. 引入http和websocket模块
  2. 创建http服务器实例
  3. 通过http创建websocket服务器
  4. 当客户端连接到websocket时,触发connection事件
    1. 接收到客户端消息触发message事件,来处理收到的消息,并通过socket.send方法向客户端发送消息.
    2. 当客户端断开连接时,触发close事件.
js 复制代码
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');
});

2.2 客户端

  1. 创建websocket实例,给它指定服务器地址
  2. 监听websocket事件
    1. 连接打开
    2. 收到消息
    3. 连接关闭
  3. 通过按钮事件发送消息到服务器
html 复制代码
<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>test-demo</title>
    </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>

2.3 访问测试

在请求头中带上了Upgrade,服务器也响应成功

当客户端点击"发消息"后,在消息中可以看到客户端发送了Hello.服务器回复了Hola

在console中也能看到服务器返回内容

相关推荐
上海云盾-小余7 小时前
域名解析被劫持怎么办?DNS 安全防护与异常修复全教程
网络·安全·ddos
科技风向标go7 小时前
**2026年Q2中国消费级监控摄像头市场观察:存量时代的竞争逻辑重构**
网络·安全·监控·户外安防
原来是猿8 小时前
网络计算器:理解序列化与反序列化(中)
linux·运维·服务器·网络·tcp/ip
汪汪大队u9 小时前
续:从 Docker Compose 到 Kubernetes(2)—— 服务优化与排错
网络·后端·物联网·struts·容器
m0_7381207211 小时前
ctfshow靶场SSRF部分——基础绕过到协议攻击解题思路与技巧(一)
服务器·前端·网络·安全·php
现代野蛮人12 小时前
【深度学习】 —— VGG-16 网络实现猫狗识别
网络·人工智能·python·深度学习·tensorflow
2301_7807896612 小时前
“数字珍珠港”再现:西北能源基地DNS篡改事件深度复盘与防护升级
运维·服务器·网络·tcp/ip·网络安全·智能路由器·能源
S1998_1997111609•X12 小时前
针对犯罪集团etc/all,pid,IP的规划及量化逻辑原理
网络·安全·百度·缓存·量子计算
徐子元竟然被占了!!12 小时前
摄像头安全策略
网络
Zzzzmo_13 小时前
【网络编程】套接字
网络·套接字