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

相关推荐
睡一觉就好了。33 分钟前
Linux 信号机制
linux·运维·网络
A_humble_scholar3 小时前
Linux(二) C++ TCP/UDP网络编程
linux·网络·c++
Sylvia33.3 小时前
篮球数据API的技术架构与工程实践:基于火星数据WebSocket实时推送体系
java·python·websocket·网络协议·架构
nnerddboy3 小时前
Rust教程05:结构体,枚举与模式匹配
开发语言·网络·rust
深圳联瑞电子LRLINK4 小时前
数据中心TOR交换机和服务器网卡怎么搭配
网络·网卡
GlobalInfo5 小时前
AI与另类数据融合,市场研究正在从“经验驱动”走向“数据智能”
大数据·网络·人工智能·ai
天吾cc5 小时前
RTT-MQTT
网络·单片机·嵌入式硬件·算法
千视kiloview5 小时前
“轻”不等于降级:IP时代广播制作系统的轻量化与Hybrid架构实践
网络·tcp/ip·架构
不爱土豆唯爱马铃薯5 小时前
升级 AiPy Pro 2.0 后,我把安全中心这几项挨个打开了数据安全、沙盒权限、工作空间隔离——这些 2.0 新功能对科研协作场景的实际影响
网络·安全·php
m0_749492225 小时前
精密制造检测设备采购:五款超高精度三坐标测量机对比
网络协议