websockt初始化,创建一个webSocket示例

写文思路:

以下主要从几个方面着手写websocket相关,包括以下:什么是webSocket,webSocket的优点和劣势,webSocket工作原理,webSocket握手示例,如何使用webSocket(使用webSocket的一个示例),应用场景。。。

一、什么是webSocket

WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议。

它由 IETF 于 2011 年作为 RFC 6455 标准化,并由 Web IDL 中的 WebSocket API 支持。

它被设计用于在客户端和服务器之间建立长时间的双向通信通道,克服传统 HTTP 的一些限制,特别是在需要实时数据传输的场景下。

二、 webSocket的优点和劣势

  • 全双工通信

    • 允许客户端和服务器在一个单一的连接上同时发送和接收消息。这与传统 HTTP 请求-响应模型不同,后者是半双工的。
  • 长连接

    • 一旦建立连接,WebSocket 保持连接打开状态,直到客户端或服务器主动关闭。这减少了频繁建立连接的开销。
  • 低延迟

    • 因为连接保持打开状态,所以无需为每个消息重建连接,从而显著降低延迟,适用于实时性要求高的应用。
  • 数据格式

    • WebSocket 支持传输文本数据和二进制数据。消息传递可以更灵活,不受 HTTP 头信息的约束。
  • 轻量级

    • 初始握手是基于 HTTP 协议进行的,但成功后,数据交换采用更轻量级的 WebSocket 帧格式,减少了数据包的开销。

三、webSocket工作原理

  • 握手

    • 客户端通过 HTTP 请求发起 WebSocket 握手请求。请求中包含 Upgrade 头信息,表示希望将连接升级为 WebSocket 连接。
    • 服务器接受请求并返回一个响应,包含 Upgrade 头信息,确认升级。
  • 数据传输

    • 握手完成后,客户端和服务器之间可以通过 WebSocket 连接交换数据。数据以帧的形式传输,每个帧包含消息的一部分。
  • 关闭连接

    • 任一方(客户端或服务器)可以随时发送关闭帧来终止连接。

四、webSocket握手示例

客户端请求

GET /chat HTTP/1.1
Host: server.example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
Sec-WebSocket-Version: 13

服务器响应:

HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=

五、使用webSocket的一个示例

以下是一个使用 JavaScript 在浏览器中建立 WebSocket 连接的简单示例:

<!DOCTYPE html>
<html>
<head><title>WebSocket Example</title>
</head>
<body><script>// 创建 WebSocket 连接var socket = new WebSocket('ws://localhost:8080');// 连接建立时触发socket.onopen = function(event) {console.log('WebSocket is open now.');socket.send('Hello Server!');};// 接收到消息时触发socket.onmessage = function(event) {console.log('Message from server: ' + event.data);};// 连接关闭时触发socket.onclose = function(event) {console.log('WebSocket is closed now.');};// 发生错误时触发socket.onerror = function(error) {console.error('WebSocket Error: ' + error);};</script>
</body>
</html>

六、应用场景

WebSocket 提供了一种高效、实时的双向通信机制,非常适合需要低延迟和高频次数据传输的应用。

  • 实时聊天应用
    • 如即时通讯工具、聊天机器人等。
  • 实时数据推送
    • 如股票市场数据、在线游戏状态同步等。
  • 协作工具
    • 如多人编辑文档、实时白板等。
  • 物联网(IoT)
    • 设备之间的实时数据交换。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/377404.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Chapter 1:数据结构前言

在数字化的世界里&#xff0c;我们每天都在与数据打交道。然而&#xff0c;你是否曾想过&#xff0c;这些数据是如何被组织、存储和处理的&#xff1f;这就是数据结构的魅力所在。 数据结构&#xff0c;简单来说&#xff0c;就是数据的组织方式。它决定了我们如何高效地访问和操…

object-C 解答算法:合并两个有序数组(leetCode-88)

合并两个有序数组(leetCode-88) 题目如下图:(也可以到leetCode上看完整题目,题号88) 首先搞懂,什么叫“非递减顺序” 非递减顺序,是指一个序列中的元素从前往后&#xff08;或从左到右&#xff09;保持不减少或相等。 这意味着序列中的元素可以保持相同的值&#xff0c;但不会…

外包干了1个月,技术明显退步。。。

有一种打工人的羡慕&#xff0c;叫做“大厂”。 真是年少不知大厂香&#xff0c;错把青春插稻秧。 但是&#xff0c;在深圳有一群比大厂员工更庞大的群体&#xff0c;他们顶着大厂的“名”&#xff0c;做着大厂的工作&#xff0c;还可以享受大厂的伙食&#xff0c;却没有大厂…

Rust 使用 panic! 还是不用 panic!

使用 panic! 还是不用 panic! 那么&#xff0c;该如何决定何时应该 panic! 以及何时应该返回 Result 呢&#xff1f;如果代码 panic&#xff0c;就没有恢复的可能。你可以选择对任何错误场景都调用 panic!&#xff0c;不管是否有可能恢复&#xff0c;不过这样就是你代替调用者…

智能合约和分布式应用管理系统:技术革新与未来展望

引言 随着区块链技术的不断发展&#xff0c;智能合约和分布式应用&#xff08;DApps&#xff09;逐渐成为数字经济中的重要组成部分。智能合约是一种自执行的协议&#xff0c;能够在预设条件满足时自动执行代码&#xff0c;而无需人工干预或中介机构。这种自动化和信任机制极大…

DP V2.1a标准学习(二)

三、线材&连接器要求 1.线材分类 线材按照支持速率的不同,划分为不同规格,具体如下: DP和USB线材混用矩阵,也就是不同规格的线材对应的支持传输速率和传输类型,如下: 2.线材和连接器组件分类 线材+连接器组件分类与DP V1.4类似,不过型号更多了,如下: 也支持2种…

Vue3 使用 Vue Router 时,prams 传参失效和报错问题

Discarded invalid param(s) “id“, “name“, “age“ when navigating 我尝试使用 prams 传递数据 <script setup> import { useRouter } from vue-routerconst router useRouter() const params { id: 1, name: ly, phone: 13246566476, age: 23 } const toDetail…

基于conda包的环境创建、激活、管理与删除

Anaconda是一个免费、易于安装的包管理器、环境管理器和 Python 发行版&#xff0c;支持平台包括Windows、macOS 和 Linux。下载安装地址&#xff1a;Download Anaconda Distribution | Anaconda 很多不同的项目可能需要使用不同的环境。例如某个项目需要使用pytorch1.6&#x…

从 Icelake 到 Iceberg Rust

本文作者丁皓是Databend 研发工程师&#xff0c;也是 ASF Member&#xff0c; Apache OpenDAL PMC Chair &#xff0c;主要研究领域包括存储、自动化与开源。 太长不看 Icelake 已经停止更新&#xff0c;请改用 iceberg-rust。 Iceberg-rust 是一个由社区驱动的项目&#xff0…

kotlin数据类型

人不走空 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌赋&#xff1a;斯是陋室&#xff0c;惟吾德馨 Kotlin基本数值类型 基本数据类型包括 Byte、Short、Int、Long、Float、Double 整数类型 类型位宽最小值最大…

内存函数(C语言)

内存函数 以下函数的头文件&#xff1a;string.h 针对内存块进行处理的函数 memcpy 函数原型&#xff1a; void* memcpy(void* destination, const void* source, size_t num);目标空间地址 源空间地址num&#xff0c;被拷贝的字节个数 返回目标空间的起始地…

在 PostgreSQL 里如何实现数据的实时监控和性能瓶颈的快速定位?

&#x1f345;关注博主&#x1f397;️ 带你畅游技术世界&#xff0c;不错过每一次成长机会&#xff01;&#x1f4da;领书&#xff1a;PostgreSQL 入门到精通.pdf 文章目录 在 PostgreSQL 里如何实现数据的实时监控和性能瓶颈的快速定位一、数据实时监控的重要性二、PostgreSQ…

【C语言初阶】探索编程基础:深入理解分支与循环语句的奥秘

&#x1f4dd;个人主页&#x1f339;&#xff1a;Eternity._ ⏩收录专栏⏪&#xff1a;C语言 “ 登神长阶 ” &#x1f921;往期回顾&#x1f921;&#xff1a;C语言入门 &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; ❀分支与循环语句 &#x1f4d2;1.…

聚类分析方法(三)

目录 五、聚类的质量评价&#xff08;一&#xff09;簇的数目估计&#xff08;二&#xff09;外部质量评价&#xff08;三&#xff09;内部质量评价 六、离群点挖掘&#xff08;一&#xff09;相关问题概述&#xff08;二&#xff09;基于距离的方法&#xff08;三&#xff09;…

element-plus 按需导入问题 404等问题

场景 新开一个项目&#xff0c;需要用element-plus这个ui库&#xff0c;使用按需引入。 这是我项目的一些版本号 "element-plus": "^2.7.6","vue": "^3.2.13","vue-router": "^4.0.3",过程&#xff08;看解决方法…

Unity发布webgl之后修改StreamingAssets 内的配置文件读取到的还是之前的配置文件的解决方案

问题描述 unity发布webgl之后&#xff0c;修改在StreamingAssets 中的配置信息&#xff0c;修改之后读取的还是之前的配置信息 读取配置文件的代码IEnumerator IE_WebGL_LoadWebSocketServerCopnfig(){var uri new System.Uri(Path.Combine(Application.streamingAssetsPath…

种田游戏扎堆,但玩家还有钱建设家园吗?

2024年暑期档&#xff0c;模拟经营游戏成为细分领域变化最为显著的一环。 6月26日泡泡玛特的《梦想家园》、7月10日《波西亚时光》手游版上线、还有心动跳跃整整研发了10年的《心动小镇》也将于7月17日上线。 事实上&#xff0c;从数量上看&#xff0c;模拟经营游戏并非小众品…

springboot 程序运行一段时间后收不到redis订阅的消息

springboot 程序运行一段时间后收不到redis订阅的消息 问题描述 程序启动后redis.user.two主题正常是可以收到消息的&#xff0c;发一条收一条&#xff0c;但是隔一段时间后&#xff1b;就收不到消息了&#xff1b; 此时如果你手动调用发送另外一个消息订阅redis.user.two2&…

代码随想录第50天|单调栈

739. 每日温度 参考 思路1: 暴力解法 思路2: 单调栈 使用场合: 寻找任一个元素的右边或者左边第一个比自己大或者小的元素位置, 存放的是遍历过的元素 记忆: 单调栈是对遍历过的元素做记录, 一般是对栈顶的元素 nums[mystack.top()] 做赋值操作的 如果想找到右边的元素大于左…

电脑文件误删除如何恢复?Top12电脑数据恢复软件汇总合集!(图文详解)

电脑文件误删除如何恢复&#xff1f;在日常使用电脑过程中&#xff0c;我们经常会遇到意外删除文件的情况。可能是因为按错了按键、误操作了鼠标&#xff0c;或者意外格式化了存储设备。这些情况都可能导致重要的文件不小心被删除。但是不用担心&#xff0c;有许多专业的数据恢…