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中也能看到服务器返回内容

相关推荐
辉视广播对讲4 小时前
医院IPTV,让医疗服务更有温度
网络·人工智能
Tim风声(网络工程师)5 小时前
光功率计中的红光(光衰测试设备)的使用
运维·网络
星辰徐哥5 小时前
C语言网络编程:TCP、UDP、HTTP深度解析
c语言·网络·tcp/ip
茉莉玫瑰花茶6 小时前
LangGraph 介绍
服务器·网络·数据库
柠檬威士忌9856 小时前
2026-05-09 AI 前沿日报:算力战争、训练网络与前沿模型监管进入新阶段
网络·人工智能
念越6 小时前
从网络基础到Socket编程:TCP/UDP原理 + Java实战详解
java·网络·tcp/ip·udp
2301_780789667 小时前
云服务器被黑能恢复吗?云服务器被黑的解决办法
运维·服务器·网络·安全·web安全
AI精钢7 小时前
修复 AI Gateway 图片 MIME 类型错误:用魔数检测替代扩展名猜测
网络·人工智能·python·gateway·aigc
Tim风声(网络工程师)9 小时前
QoS (服务质量)和TE(流量工程)的区别
运维·网络
七仔啊10 小时前
IPv6初尝试
网络·智能路由器