聊聊JS中的WebSocket

news2024/11/17 1:16:53

你好,我是沐爸,欢迎点赞、收藏和关注。个人知乎

在JavaScript中,使用WebSocket非常简单直观。通过几行代码,你就可以轻松创建一个WebSocket连接,并监听来自服务器的消息。无论是开发实时聊天应用、在线游戏、实时数据分析平台,还是任何需要实时数据交互的场景,WebSocket都能为你提供强大的技术支持。

一、WebSocket是什么?

WebSocket是一种在Web浏览器和服务器之间建立全双工通信的协议。它允许网页实时地发送和接收数据,而不需要页面刷新或像传统HTTP协议那样的轮询操作。

二、WebSocket的特点

  1. 实时性:WebSocket允许服务器主动向客户端推送数据,实现实时通信。
  2. 双向通信:WebSocket支持同时发送和接收数据,实现双向通信。
  3. 低延迟:由于建立了持久连接,并且数据传输没有额外的HTTP头部信息负担,因此WebSocket能够更快地传输小量数据。
  4. 节省带宽:WebSocket只需要一个TCP握手就能创建一个到服务器的链接,并且这个链接可以被复用以节省带宽。
  5. 跨域通信:WebSocket协议支持跨域通信,因此可以在任何Web域之间建立实时连接。
  6. 强大的可靠性:WebSocket提供了自动重连机制和数据压缩功能,增强了通信的可靠性。

三、WebSocket的基本使用步骤

在JavaScript中使用WebSocket,通常遵循以下步骤:

  1. 创建WebSocket对象

    使用new WebSocket(url)构造函数创建WebSocket对象,并传入要连接的WebSocket服务器的URL。例如:
const socket = new WebSocket('ws://localhost:8080');
  1. 监听事件

    WebSocket对象提供了一些事件,用于处理连接、消息、关闭和错误等情况。常用的事件有:
    • onopen:连接建立时触发。
    • onmessage:收到服务器消息时触发。
    • onclose:连接关闭时触发。
    • onerror:发生错误时触发。

示例:

socket.onopen = function(event) {  
    console.log('WebSocket连接已建立');  
};  
 
socket.onmessage = function(event) {  
    console.log('收到消息:', event.data);  
};  
 
socket.onclose = function(event) {  
    console.log('WebSocket连接已关闭');  
};  
 
socket.onerror = function(error) {  
    console.error('WebSocket Error:', error);  
};
  1. 与服务器通信

    一旦连接建立,就可以使用WebSocket对象提供的send()方法向服务器发送数据。例如:
socket.send('Hello, server!');
  1. 关闭连接

    如果需要关闭WebSocket连接,可以调用socket.close()方法。

四、WebSocket的优缺点

优点:

  • 实时性强,适合需要实时数据交互的应用场景。
  • 双向通信,可以同时发送和接收数据。
  • 节省带宽和服务器资源,因为不需要频繁地进行HTTP请求。
  • 跨域通信方便,简化了跨域数据交换的复杂度。

缺点

  • 兼容性问题,一些老版本的浏览器可能不支持WebSocket。
  • 缺乏完善的安全策略,需要开发者自行处理加密和验证等安全问题。
  • 对网络环境要求较高,网络波动可能导致连接断开。
  • 服务器压力相对较高,因为需要保持长连接。

五、WebSocket的应用场景

WebSocket适用于实时性要求高的应用场景,如社交聊天、弹幕、多玩家游戏、协同编辑、股票基金实时报价、实时交易、体育实况更新、视频会议/聊天、实时通知等。通过WebSocket,可以实现服务器与客户端之间的实时数据交换,提升用户体验。

六、WebSocket和HTTP的区别?

主要区别如下:

  • 通信方式:WebSocket 可以进行双向数据传输,客户端和服务器可以相互发消息。而 HTTP 是单向的,HTTP 的通信只能由客户端发起,服务端响应。
  • 连接特性:WebSocket在建立连接后,会保持这个连接直到被明确关闭。HTTP通常使用短连接,即每次请求-响应完成后,连接就会被关闭。
  • 应用场景:WebSocket广泛应用于需要实时数据交换的场景,如在线聊天、实时游戏等;HTTP主要用于Web页面的访问和数据传输,如网页浏览、文件下载、API接口调用等。

七、WebSocket的协议标识符?

如果服务器网址是HTTP,那么WebSocket 对应的是ws。

如果服务器网址是HTTPS加密的,那么WebSocket 对应的是wss。

八、如何搭建一个本地WebSocket服务?

推荐阅读:2分钟搭建一个简单的WebSocket服务器

在这里插入图片描述

希望对你有所帮助,下期再见!

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

高效录制新选择:2024年Windows录屏软件

录屏能帮助我们捕捉屏幕上的精彩瞬间,作为老师可以用来录制课程,作为会议记录员可以用来录制远程会议。那么有什么软件是适合windows录屏的呢?这次我们一起来探讨一下吧。 1.福昕录屏大师 链接:www.foxitsoftware.cn/REC/ 这款软…

【数据结构】 顺序表的应用 - 通讯录的实现

0. 前言 上一期博客中,我们已经学习了顺序表是什么,以及顺序表相关接口的实现,了解了如何实现顺序表的插入和删除等功能,那么在这期博客,我们可以基于顺序表来实现一个通讯录,在通讯录当中能实现联系人的增…

【代码随想录训练营第42期 Day27打卡 贪心Part1 - LeetCode 455.分发饼干 376. 摆动序列 53. 最大子序和

目录 一、贪心 二、题目与题解 题目一:455.分发饼干 题目链接 题解:排序双指针贪心 题目二:376. 摆动序列 题目链接 题解:贪心 题目三:53. 最大子序和 题目链接 题解1:暴力(失败&…

解决生产环境服务启动失败:一次远程Bug排查与修复历程

一、问题现象 同事没事一直给服务器断电(直接拔插头那种!!!!) 二、初步排查 首先,我登录到生产服务器,查看服务启动日志。在日志中,我发现了一些异常信息,…

全网独家梳理:数字病理图像的常用存储格式以及格式转换的方法|24-08-17

小罗碎碎念 这一期推文,跟你们分享一些比较底层,并且顶刊中不会涉及但是又至关重要的内容。 我们在做任何一个病理AI的项目前,有两样东西是一定会拿到手的——切片&对应的临床基线表。(如果做多组学/多模态的项目,…

宠物空气净化器推荐购买吗?真的能除毛去味吗?

自从做了猫咖店老板,我这生活真的是美滋滋,每天都可以摸到不同品种的可爱的小猫咪,在赚钱养家的同时还能肆意和猫咪贴贴,连朋友都说想和我干一样的工作了。每天接待的顾客也不少,店里面的空气质量也还不错,…

模块一(任务2):SDH系统原理解读

一、PDH与SDH标准速率介绍 OTN网络技术是基于SDH系统和WDM系统设计的,所以学习OTN系统原理必须要掌握SDH和WDM量大系统原理 1、PDH与SDH概念及特点 二、SDH的帧结构 目前通信常见的数据结构有两种: 报文:基于以太网通信的数据结构 帧&am…

真诚巨作:全文一万字教你快速熟悉项目|文心快码帮你快速熟悉~

写在前面 : 上了好多年的学,终于毕业进入职场啦~在公司也有一段时间了,慢慢地也变成了纯正的社畜了。近来开始熟悉部门的项目代码,说实话公司的代码真跟以前接触的不一样,内部各种自建框架,让人看得眼花缭乱…

ARCGIS PRO 要素标注背景色透明度的设置

使用ArcGIS Pro 设置标注背景色的透明度 一、点击标注属性 二、点击符号、注释 三、下拉框选择背景 四、背景符号 五、点击颜色 六、编辑颜色 七、应用

Java语言程序设计基础篇_编程练习题**16.26(模拟:升旗并播放国歌)

目录 题目:**16.26(模拟:升旗并播放国歌) 习题思路: 代码示例 结果展示 音频来源 题目:**16.26(模拟:升旗并播放国歌) 创建一个显示升国旗的程序,如图15-14…

还在使用百度翻译?这4款翻译工具也能帮你打破语言壁垒!

是谁像我一样,一提到翻译工具第一想到的就是百度翻译。它可以是用了好久的翻译工具,可是随着学习的深入, 我还是发觉了一些其他的实用翻译工具。比如下面这四款: 1、365翻译工具 直达链接:https://fanyi.pdf365.cn/ …

NLP之transformer:transformer-explainer的简介、安装和使用方法、案例应用之详细攻略

NLP之transformer:transformer-explainer的简介、安装和使用方法、案例应用之详细攻略 目录 相关论文 《Transformer Explainer: Interactive Learning of Text-Generative Models》翻译与解读 transformer-explainer的简介 transformer-explainer的安装和使用方…

尚硅谷MYSQL(12-13章)

第十二章数据类型 比如说tinyint(4)这个四表示的是那个取值范围的位数 他只是一个显示 比如说int后面应该是int(11)这是有符号的 无符号int是int(10) 如果写成int(3)但是存的数据是…

论文写作新神器!10款可以写论文的人工智能软件

在当今快速发展的数字时代,人工智能(AI)技术已经渗透到各个领域,包括学术研究和论文写作。为了帮助学者和学生提高写作效率和质量,市场上涌现了许多优秀的AI写作工具。本文将详细介绍10款可以写论文的人工智能软件&…

STM32F103C8T6单片机原理图设计(PCB板)

先了解了以下stm32f103c8t6的引脚使用: 对比过一些原理图,我发现除了特定协议的引脚功能,只要功能正确,可以自己选择连接对应的引脚。可以根据使用的LED/BEEP/DHT11/BH1750/ESP8266等模块的功能对应相应的引脚: WIFI(…

[开源] 安卓系统发送modbus协议到硬件设备下位机

最近是在研究安卓板子上的modbus通信,于是写了这个maven依赖。 项目中主要用到的功能是读写寄存器,所以依赖中重点测试了读写多个寄存器的协议。 另外你可以自定义协议pdu交给程序进行封装及发送。 如果使用中发现了什么问题,可以到仓库添…

DHU OJ 循环结构 整除的尾数

思路及代码 //input T int >0 //input a,b int 0< <10000 10< <100 #include<iostream> #include<iomanip> using namespace std; int main(){int T;cin >> T;while (--T > 0){int a, b;cin >> a >> b; //solution // (a*100…

Tomcat初篇

目录 Tomcat主要特点Tomcat的核心组件Tomcat使用安装Tomcat配置Tomcat启动和停止Tomcat Tomcat工作原理目录结构配置文件性能优化策略 Tomcat Apache Tomcat是一个开源的Servlet容器和Web服务器&#xff0c;广泛用于运行基于Java的Web应用程序。它实现了Java Servlet和JavaSer…

【Web开发手礼】探索Web开发的秘密(十八)-Vue2(4)部门管理页面、路由、打包部署

主要介绍了部门管理页面、路由、打包部署&#xff01;&#xff01;&#xff01; 文章目录 前言 部门管理页面 Vue路由 打包部署 打包 部署 总结 前言 主要介绍了部门管理页面、路由、打包部署&#xff01;&#xff01;&#xff01; 部门管理页面 <template><div>&…

module ‘pkgutil‘ has no attribute ‘ImpImporter‘. Did you mean_ ‘zipimporter‘_

错误详情&#xff1a; Traceback (most recent call last):File "<frozen runpy>", line 198, in _run_module_as_mainFile "<frozen runpy>", line 88, in _run_codeFile "C:\ProgramData\anaconda3\envs\py312\Scripts\mim.exe\__main…