当前位置: 首页 > article >正文

说一下你对 webScoket的了解,以及有哪些API

发现宝藏

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。【宝藏入口】。


WebSocket 的概念

WebSocket 是一种在 客户端与服务器之间 全双工通信的协议,它在单个 TCP 连接上提供了双向实时通信的能力。WebSocket 克服了传统 HTTP 协议的缺陷,使客户端与服务器能够进行持续的通信,而不需要重复建立和关闭连接。

特点

  1. 全双工通信:允许客户端与服务器同时发送和接收数据。
  2. 减少开销:相比 HTTP 轮询,不需要反复建立和断开连接。
  3. 实时性强:适用于需要实时数据交换的场景。
  4. 基于 TCP 协议:确保数据的可靠传输。

WebSocket 的工作原理

WebSocket 通过 HTTP 握手 来初始化连接,但一旦连接建立,就会升级为 WebSocket 协议。

握手过程
  1. 客户端发起 HTTP 请求 并添加 Upgrade 头,表明希望升级为 WebSocket。

    GET /chat HTTP/1.1
    Host: example.com
    Upgrade: websocket
    Connection: Upgrade
    Sec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw==
    Sec-WebSocket-Version: 13
    
  2. 服务器响应请求并确认连接升级。

    HTTP/1.1 101 Switching Protocols
    Upgrade: websocket
    Connection: Upgrade
    Sec-WebSocket-Accept: HSmrc0sMlYUkAGmm5OPpG2HaGWk=
    
  3. 握手成功后,客户端和服务器可以通过 TCP 长连接 进行双向通信。


WebSocket API

WebSocket 提供了一组简单的 JavaScript API,可以用来建立和管理 WebSocket 连接。

1. 创建 WebSocket 连接
const socket = new WebSocket('ws://example.com/socket'); // 使用 ws:// 或 wss://
  • ws://:非加密连接。
  • wss://:加密连接(类似 HTTPS)。

2. WebSocket 事件
事件描述示例代码
open连接建立成功时触发socket.onopen = () => console.log('连接成功');
message接收到消息时触发socket.onmessage = (event) => console.log(event.data);
error连接出现错误时触发socket.onerror = (error) => console.error(error);
close连接关闭时触发socket.onclose = () => console.log('连接已关闭');

3. 发送消息

使用 send() 方法发送数据:

socket.onopen = () => {
    socket.send('Hello, Server!'); // 发送字符串
    socket.send(JSON.stringify({ type: 'greeting', text: 'Hello!' })); // 发送 JSON 数据
};

4. 关闭连接

使用 close() 方法主动关闭连接:

socket.close(); // 关闭连接

可以通过指定关闭代码和原因:

socket.close(1000, '正常关闭'); // 1000 表示正常关闭

WebSocket 示例

下面是一个简单的 WebSocket 通信示例:

HTML + JavaScript 代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>WebSocket 示例</title>
</head>
<body>
    <h1>WebSocket 通信示例</h1>
    <button id="sendButton">发送消息</button>
    <div id="output"></div>

    <script>
        // 1. 创建 WebSocket 连接
        const socket = new WebSocket('wss://echo.websocket.org'); // 使用测试服务器

        // 2. 连接成功
        socket.onopen = () => {
            console.log('WebSocket 连接成功');
            document.getElementById('output').innerHTML += '<p>连接成功</p>';
        };

        // 3. 接收消息
        socket.onmessage = (event) => {
            console.log('收到消息:', event.data);
            document.getElementById('output').innerHTML += `<p>收到消息: ${event.data}</p>`;
        };

        // 4. 发送消息
        document.getElementById('sendButton').addEventListener('click', () => {
            const message = 'Hello, WebSocket!';
            socket.send(message);
            console.log('发送消息:', message);
            document.getElementById('output').innerHTML += `<p>发送消息: ${message}</p>`;
        });

        // 5. 关闭连接
        socket.onclose = () => {
            console.log('WebSocket 连接关闭');
            document.getElementById('output').innerHTML += '<p>连接关闭</p>';
        };

        // 6. 错误处理
        socket.onerror = (error) => {
            console.error('WebSocket 错误:', error);
        };
    </script>
</body>
</html>

WebSocket 应用场景

  1. 实时聊天:如在线客服、聊天室。
  2. 实时数据推送:如股票行情、天气更新。
  3. 在线协同编辑:如 Google Docs 的多人编辑功能。
  4. 实时游戏:如多人在线游戏中的状态同步。
  5. IoT 数据传输:设备与服务器间进行实时数据通信。

总结

  • WebSocket 提供了高效的双向通信能力,适用于需要实时交互的场景。
  • 使用简单的 API:openmessagecloseerror 等事件。
  • 支持文本和二进制数据传输,可以与服务器轻松实现长连接。

在现代 Web 开发中,WebSocket 已成为实现实时通信的重要工具。


http://www.kler.cn/a/441278.html

相关文章:

  • 青少年编程与数学 02-008 Pyhon语言编程基础 07课题、数字
  • < OS 有关> BaiduPCS-Go 程序的 菜单脚本 Script: BaiduPCS-Go.Menu.sh (bdgo.sh)
  • SSM-MyBatis-总结
  • 【性能优化专题系列】利用CompletableFuture优化多接口调用场景下的性能
  • NLP模型大对比:Transformer > RNN > n-gram
  • YOLOv11-ultralytics-8.3.67部分代码阅读笔记-head.py
  • 12.13 深度学习-空间注意力仿射变换STN
  • 使用Vue.js构建待办事项应用:从零到上线
  • Webpack是什么?
  • 《Django 5 By Example》阅读笔记:p543-p550
  • LeetCode刷题day26——动态规划
  • 秒杀业务中的库存扣减为什么不加分布式锁?
  • C# 趋势图:洞察其发展轨迹与未来走向
  • 力扣题目解析--两两交换链表中的节点
  • Linux驱动开发(14):PWM子系统–pwm波形输出实验
  • 【Prompt Engineering】3.文本概括
  • leetcode45.跳跃游戏II
  • windows C#-扩展方式的常见使用模式
  • Visual Studio 2022 安装和管理 GitHub Copilot
  • 【计算机网络】期末考试预习复习|中
  • 前端(组件间传参)
  • 柚坛工具箱Uotan Toolbox适配鸿蒙,刷机体验再升级
  • sylar:日志管理
  • 力扣hot100——子串
  • Spark3.2.0集群部署ON YARN
  • Electron-Vue 框架的构成拆解 动态 Webpcak 5 打包