认识WebSocket 以及怎么使用WebSocket

了解WebSocket

WebSocket是一种在单个TCP连接上进行全双工通信的协议。它提供了一种实时的、持久的、双向通信机制,可以让浏览器和服务器之间实时地发送数据,而不需要使用AJAX轮询或长轮询等技术。

与HTTP相比,WebSocket具有以下优点:

  1. 实时性:WebSocket支持双向通信,可以实时地发送和接收数据,无需等待HTTP请求的响应。

  2. 减少网络流量:WebSocket的数据帧包含较少的头部信息,可以减少网络流量和延迟。

  3. 减轻服务器压力:WebSocket不会像HTTP请求一样每次都需要建立和断开连接,减轻了服务器的压力。

  4. 客户端和服务器端都可以主动发送数据,数据传输的效率更高。

在Web开发中,WebSocket常用于实现即时聊天、多人游戏、实时数据展示等功能。同时,由于WebSocket基于TCP协议,还可以用于远程控制和数据采集等领域。

如何使用

在前端中使用WebSocket需要经过以下步骤:

  1. 创建WebSocket对象:通过WebSocket构造函数创建WebSocket对象,传入服务器的WebSocket地址即可, 如:var socket = new WebSocket('ws://localhost:8080');

  2. 监听WebSocket事件:WebSocket对象提供了一系列的事件供我们监听:

    • onopen:WebSocket连接成功时触发
    • onmessage:WebSocket接收到消息时触发
    • onerror:WebSocket连接发生错误时触发
    • onclose:WebSocket连接关闭时触发

    我们需要根据业务需求分别监听这些事件。比如,如果想要向服务器发送数据,可以在onopen事件中使用send()方法。

  3. 使用WebSocket对象发送和接收消息:可以使用send()方法向服务器发送消息,可以使用onmessage事件接收服务器返回的消息。

    发送消息示例:socket.send('hello world');

    接收消息示例:socket.onmessage = function(event) { console.log(event.data); }

在使用WebSocket时需要注意

  • 在浏览器中,WebSocket只能使用安全协议(wss://),或者在localhost上使用非安全协议(ws://);
  • 处理WebSocket连接断开时的情况,可以在onclose事件中重新尝试连接或进行其他操作;
  • 在使用WebSocket发送消息时,需要对数据进行序列化,例如使用JSON.stringify()方法将数据转换为字符串。在接收消息时,同样需要对接收到的字符串进行反序列化,例如使用JSON.parse()方法将字符串转换为JSON对象。

同事还需要注意以下几点:

  1. 安全性:由于WebSocket是基于TCP协议的,因此必须采取安全措施,如SSL加密,以保护数据的安全性。

  2. 数据传输量:由于WebSocket建立了持久连接,因此在传输大量数据时需要注意传输量,否则可能会导致网络拥塞。

  3. 服务器负载:WebSocket需要建立持久连接,因此服务器的负载会增加,需要根据实际需求进行服务器的规划和优化。

  4. 通信速度:WebSocket建立的连接速度较快,但是在通信过程中可能会受到网络条件的影响,需要对连接状态进行良好的监控和管理。

  5. 跨域访问:由于浏览器的同源策略,WebSocket需要进行跨域访问时需要进行特殊处理,如使用代理服务器或者设置跨域访问的策略。

在Vue中实现WebSocket的过程如下:

  1. 创建Vue组件并定义data和methods属性。
<template><div><p>{{ message }}</p></div>
</template><script>
export default {data () {return {message: ''}},methods: {connect () {const socket = new WebSocket('ws://localhost:3000')socket.addEventListener('message', (event) => {this.message = event.data})}}
}
</script>

  1. 在组件的created或mounted钩子中调用connect方法建立WebSocket连接。
<template><div><p>{{ message }}</p><button @click="connect">Connect</button></div>
</template><script>
export default {data () {return {message: ''}},methods: {connect () {const socket = new WebSocket('ws://localhost:3000')socket.addEventListener('message', (event) => {this.message = event.data})}},mounted() {this.connect()}
}
</script>

  1. 在后台服务器中实现WebSocket服务。
const WebSocket = require('ws')
const wss = new WebSocket.Server({ port: 3000 })wss.on('connection', (ws) => {ws.on('message', (message) => {console.log(`Received message => ${message}`)})setInterval(() => {ws.send(`Message from server at ${new Date().toISOString()}`)}, 3000)
})

以上实现了一个简单的WebSocket示例,当组件挂载时会自动建立WebSocket连接,接收并显示从服务器发送的消息。

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

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

相关文章

pytorch-gpu(Anaconda3+cuda+cudnn)

文章目录 下载Anaconda3安装&#xff0c;看着点next就行比较懒所以自动添加path测试 cuda安装的时候不能改路径如果出现报错&#xff0c;关闭杀毒软件一直下一步就好取消勾选“CUDA”中的“Visual Studio Intergration”一直下一步即可测试安装成功 cudnn解压后将这三个文件夹复…

爬虫项目(11):使用多线程对36手机高清壁纸批量抓取

文章目录 书籍推荐目标网址单线程实现多线程实现爬取结果书籍推荐 如果你对Python网络爬虫感兴趣,强烈推荐你阅读《Python网络爬虫入门到实战》。这本书详细介绍了Python网络爬虫的基础知识和高级技巧,是每位爬虫开发者的必读之作。详细介绍见👉: 《Python网络爬虫入门到…

【大模型】大语言模型语料下载

文章目录 概述Hugging Faceobs操作git-lfs例子RedPajama-Data-1TSlimPajama-627B/git clone续传 数据格式参考资料 概述 大模型训练中语料是非常重要的&#xff0c;目前公网上有各种各样的语料可以供下载&#xff0c;但是不可能每个用户、每次训练任务都通过公网去拉取语料&am…

VS设置--查看引用库源代码

1.工具-->选项-->文本编译器-->C#-->高级-->勾选支持导航到反编译源(试验)

du_命令可以像find_命令那样列出最大的文件吗

【赠送】IT技术视频教程&#xff0c;白拿不谢&#xff01;思科、华为、红帽、数据库、云计算等等_厦门微思网络的博客-CSDN博客文章浏览阅读418次。风和日丽&#xff0c;小微给你送福利~如果你是小微的老粉&#xff0c;这里有一份粉丝福利待领取...如果你是新粉关注到了小微&am…

Qt信号量用于对共享资源进行同步

定义信号量与缓冲区&#xff1a; const int BufferSize 8; int buffer1[BufferSize]; int buffer2[BufferSize]; int curBuf1; //当前正在写入的Bufferint bufNo0; //采集的缓冲区序号quint8 counter0;//数据生成器QSemaphore emptyBufs(2);//信号量&#xff1a;空的缓冲区…

关于论文图表目录和交叉引用的使用小结

目录 1 题注用法 2 交叉引用 最近在写论文&#xff0c;遇到不少Word使用的问题(错误&#xff01;文档中没有指定样式的文字。) 网上其实也有很多解决方案但我当时还是折腾了几个小时才整出来图目录&#xff0c;以下是针对我目前使用的感觉简明很多的方法。 1 题注用法 1) 假…

基于LDPC编译码和FP-MAP球形检测算法的协作MIMO系统误码率matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1 LDPC码 4.1 Fincke-Pohst-MAP球形检测算法 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2017b 3.部分核心程序 .........................................…

CLK_CFG_AD9516时钟芯片(配置代码使用说明)

目录 1 概述2 例程功能3 例程端口4 数据时序5 注意事项6 调用例程7附录&#xff08;代码以及寄存器&#xff09; 1 概述 本文用于讲解CLK_CFG_AD9516例程配置代码的使用说明&#xff0c;方便使用者快速上手。 2 例程功能 本例程 是采用verilog hdl编写&#xff0c;实现AD951…

以太网和局域网

计算机网络的定义 计算机网络是一个将分散的、具有独立功能的计算机&#xff0c;通过通信设备与线路连接起来&#xff0c;由根据协议编写的软件来实现的资源共享和信息传递的系统 计算机网络的分类 广域网是互联网的核心部分 局域网 常见的局域网拓扑结构有4大类&#xff1a…

2023注册电气工程师考试大纲

考试大纲如下&#xff1a; 基础考试大纲 一、公共基础 (一)数学 1.1空间解析几何 向量的线性运算;向量的数量积、向量积及混合积;两向量垂直、平行的条件;直线方程;平面方程;平面与平面、直线与直线、平面与直线之间的位置关系;点到平面、直线的距离;球面、母线平行于坐标…

前端设计模式之【工厂模式】

文章目录 前言什么时候不用介绍工厂模式的流程例子优点缺陷后言 前言 hello world欢迎来到前端的新世界 &#x1f61c;当前文章系列专栏&#xff1a;前端设计模式 &#x1f431;‍&#x1f453;博主在前端领域还有很多知识和技术需要掌握&#xff0c;正在不断努力填补技术短板。…

九九乘法表c 语言

下面是用C语言打印九九乘法表的示例代码&#xff1a; #include <stdio.h>int main() {int i, j;for (i 1; i < 9; i) {for (j 1; j < i; j) {printf("%d * %d %d\t", i, j, i * j);}printf("\n");}return 0; }这段代码使用嵌套的两个循环&…

Spring-事务

EnableTransactionManagement工作原理 开启Spring事务本质上就是增加了一个Advisor&#xff0c;在使用EnableTransactionManagement注解来开启Spring事务时&#xff0c;该注解代理的功能就是向Spring容器中添加了两个Bean Import(TransactionManagementConfigurationSelector…

10 分钟学会使用 Java 多线程

大家好&#xff0c;我是伍六七。 今天阿七来聊聊 Java 程序员们面试、工作中经常会碰到的线程池。它的概念、原理、使用以及可能会碰到的一个坑。 一、Java 线程池基本概念 1、线程池的 7 个核心参数 这是 Java 初中级程序员们面试必问的面试题了&#xff0c;我们来看&…

关于start-burp抓包夜神-系统证书导入

1、开启开发中模式 2、开启USB调试 3、开启端口监听并下载start-burp证书 4、证书在线格式转换 根据该网站【在线DER格式转pem CER格式转pem CRT格式转PEM证书格式--查错网】也可以搜索其它在线转换网站进行操作 新建一个文本文件重名为【9a5ba575.0】&#xff0c;将转换的内…

elemetui 解决同个页面,同时使用多个el-table表格组件导致的数据错乱

1、背景 在一个页面中&#xff0c;使用了饿了么框架的3个el-table表格&#xff0c;3个表格平级&#xff0c;只不过是根据条件判断渲染哪个表格。本来以为使用v-if就可以隔离&#xff0c;没想到还是出现了问题&#xff0c;因为3个表格中有几列绑定的字段一模一样&#xff0c;导…

Qt高级--(1)自定义导航栏

好久没有水博客&#xff0c;参考别人的写一个自定义的导航栏吧。用处挺多的&#xff0c;可以用来切换到不同的信息显示界面。 功能点 1.默认情况下&#xff0c;文字居中显示&#xff0c;不显示图标&#xff0c;不显示三角。 2.可设置文字左侧、顶部、右侧、底部边距&#xff…

2023项目总结,感悟、矛盾与规划

背景 本人自2020年加入某创新中心&#xff0c;已经三年多了&#xff0c;只能说是日月如梭、白驹过隙。家里小孩22年出生&#xff0c;现在也2岁了。房贷、户口等比较重要的几件事竟然在不知不觉中完成了&#xff0c;今天也是有时间把相关的项目做个总结。 项目总结 1、主要科研…

PHP7使用C++扩展开发

Windows 使用【php-sdk-binary-tools】工具在windows下编译dll扩展。 php-sdk-binary-tools&#xff1a;GitHub - microsoft/php-sdk-binary-tools: Tool kit for building PHP under Windows 编译过程&#xff1a;php mb扩展 windows7,php7.4自定义扩展的编写Windows篇-CSD…