码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 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事件.
    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');
    });
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    2.2 客户端

    1. 创建websocket实例,给它指定服务器地址
    2. 监听websocket事件
      1. 连接打开
      2. 收到消息
      3. 连接关闭
    3. 通过按钮事件发送消息到服务器
    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>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    2.3 访问测试

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

    请添加图片描述

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

    请添加图片描述

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

    请添加图片描述

  • 相关阅读:
    C语言之指针、结构体、动态内存分配
    [附源码]Python计算机毕业设计爱行无忧旅游票务管理系统
    vue中tinymce的使用
    BaaS、FaaS、Serverless 都是什么?
    2024能源动力、机械自动化与航天航空技术国际学术会议(ICEPMAT2024)
    微软宣布计划在 Windows 10 版本 22H2 中引入 AI 助手 Copilot
    【区块链 | 默克尔树】如何利用Merkle实现空投,像Uniswap一样使用Merkle执行Airdrop
    SD00HA 80mΩ,可调快速响应限流功率开关芯片IC
    Error: Node Sass version 7.0.1 is incompatible with ^4.0.0.
    什么是PDF转换器?很少有人知道的方法
  • 原文地址:https://blog.csdn.net/qq_29974229/article/details/132835077
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号