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

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)
    • 设备之间的实时数据交换。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 安装Go语言常用工具
  • three-platformize 微信小程序 uniapp 使用截图功能
  • Linux系统基础命令行指令——Ubuntu
  • 《C++20设计模式》命令模式思考
  • LabVIEW中自定义Ring控件的图标
  • 第十八节 LLaVA如何按需构建LORA训练(视觉、语言、映射多个组合训练)
  • 上海外贸建站公司wordpress模板推荐
  • 【Linux进阶】文件系统7——文件系统简单操作
  • FUSE(用户空间文件系统)命令参数
  • 学懂C#编程:C# 索引器(Indexer)的概念及用法
  • 通用个人客户关系管理系统设计
  • OpenSNN推文:盛夏智慧之光:七月高校新闻聚焦
  • Git命令常规操作
  • C++ //练习 14.45 编写类型转换运算符将一个Sales_data对象分别转换成string和double,你认为这些运算符的返回值应该是什么?
  • 电脑多开卡顿的所有原因汇总
  • android高仿小视频、应用锁、3种存储库、QQ小红点动画、仿支付宝图表等源码...
  • android图片蒙层
  • echarts的各种常用效果展示
  • GraphQL学习过程应该是这样的
  • JavaScript 基础知识 - 入门篇(一)
  • Java小白进阶笔记(3)-初级面向对象
  • Linux快速复制或删除大量小文件
  • nodejs调试方法
  • PHP 的 SAPI 是个什么东西
  • React Transition Group -- Transition 组件
  • storm drpc实例
  • -- 查询加强-- 使用如何where子句进行筛选,% _ like的使用
  • 第三十一到第三十三天:我是精明的小卖家(一)
  • 第十八天-企业应用架构模式-基本模式
  • 分享几个不错的工具
  • 简单数学运算程序(不定期更新)
  • 开源地图数据可视化库——mapnik
  • 前端面试之闭包
  • 文本多行溢出显示...之最后一行不到行尾的解决
  • 400多位云计算专家和开发者,加入了同一个组织 ...
  • 说说我为什么看好Spring Cloud Alibaba
  • ‌U盘闪一下就没了?‌如何有效恢复数据
  • ## 1.3.Git命令
  • #162 (Div. 2)
  • $forceUpdate()函数
  • (cljs/run-at (JSVM. :browser) 搭建刚好可用的开发环境!)
  • (二)c52学习之旅-简单了解单片机
  • (附源码)ssm基于jsp的在线点餐系统 毕业设计 111016
  • (七)Knockout 创建自定义绑定
  • (三)Kafka 监控之 Streams 监控(Streams Monitoring)和其他
  • (十八)SpringBoot之发送QQ邮件
  • (一)RocketMQ初步认识
  • (转)一些感悟
  • (转载)PyTorch代码规范最佳实践和样式指南
  • **PHP分步表单提交思路(分页表单提交)
  • .NET Core Web APi类库如何内嵌运行?
  • .NET Core WebAPI中封装Swagger配置
  • .Net Core 微服务之Consul(二)-集群搭建
  • .net core使用ef 6
  • .net dataexcel 脚本公式 函数源码