首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
AI 模拟面试
简历
求职
学习
基础学习课
实战项目课
求职辅导课
专栏&文章
竞赛
我要招人
发布职位
发布职位、邀约牛人
更多企业解决方案
AI面试、笔试、校招、雇品
HR免费试用AI面试
最新面试提效必备
登录
/
注册
twentyl
华南农业大学 前端工程师
发布于广东
关注
已关注
取消关注
@__sgf__:
WebSocket
WebSocket详解WebSocket是一种在单个 TCP 连接上进行全双工通信的协议,它允许客户端和服务器之间进行实时数据交换。与传统的HTTP请求相比,WebSocket具有更低的延迟和更高的并发性,适用于实时通信场景,如即时聊天、实时游戏、实时数据更新等。WebSocket的主要特点和优势包括:实时性:WebSocket允许服务器主动向客户端推送数据,实现实时通信,无需客户端发起请求。全双工通信:WebSocket允许客户端和服务器同时发送和接收数据,实现真正的双向通信。较低的延迟:由于WebSocket在建立连接后保持长连接,减少了连接和关闭的开销,因此具有较低的延迟。更少的数据传输:WebSocket使用二进制帧传输数据,相比HTTP的文本传输,数据传输更加高效。跨域支持:WebSocket支持跨域通信,不受同源策略限制。WebSocket的通信过程如下:客户端发送WebSocket握手请求,请求头中包含Upgrade: websocket和Connection: Upgrade等字段,告知服务器希望升级到WebSocket协议。服务器返回WebSocket握手响应,响应头中包含Upgrade: websocket和Connection: Upgrade等字段,告知客户端已接受WebSocket协议。WebSocket连接建立后,客户端和服务器可以互相发送数据。客户端通过JavaScript的WebSocket对象进行数据交换,服务器则可以使用WebSocket库进行数据处理。当某一方需要关闭连接时,可以发送关闭帧进行关闭。连接关闭后,双方都会收到关闭通知。在前端,可以使用以下代码创建和使用WebSocket连接:// 创建WebSocket对象,参数是WebSocket服务器的URLconst socket = new WebSocket("ws://example.com");// 监听WebSocket连接建立事件socket.onopen = () => { console.log("WebSocket连接已建立");};// 监听WebSocket消息事件socket.onmessage = (event) => { const data = event.data; console.log("收到消息:" + data);};// 监听WebSocket连接关闭事件socket.onclose = () => { console.log("WebSocket连接已关闭");};// 向服务器发送消息socket.send("Hello, WebSocket!");在后端,可以使用WebSocket库(如ws模块)来创建WebSocket服务器,处理客户端的连接和消息:const WebSocket = require("ws");// 创建WebSocket服务器,监听指定端口const wss = new WebSocket.Server({ port: 8080 });// 监听WebSocket连接事件wss.on("connection", (ws) => { console.log("WebSocket连接已建立"); // 监听客户端发送的消息 ws.on("message", (message) => { console.log("收到消息:" + message); // 向客户端发送消息 ws.send("Hello, WebSocket!"); }); // 监听WebSocket连接关闭事件 ws.on("close", () => { console.log("WebSocket连接已关闭"); });});总结:WebSocket是一种实现实时双向通信的协议,能够在单个TCP连接上进行全双工通信,具有实时性、低延迟、跨域支持等优势,适用于实时通信场景。在前端可以通过JavaScript的WebSocket对象创建和使用WebSocket连接,在后端可以使用WebSocket库创建WebSocket服务器。websocket如何与客户端建立连接的WebSocket与客户端建立连接的过程如下:客户端发起WebSocket连接:客户端通过在浏览器中创建WebSocket对象,并使用WebSocket的构造函数传入服务器的WebSocket地址(ws://或wss://协议)来发起连接。服务器接受WebSocket连接请求:服务器端收到客户端发起的WebSocket连接请求后,会生成一个WebSocket实例,并保持这个实例与客户端的连接。WebSocket握手:在连接建立阶段,客户端和服务器会进行WebSocket握手,以确保双方都支持WebSocket协议,并建立双向通信。双向通信:一旦握手成功,客户端和服务器之间就建立了双向通信的通道,双方可以通过WebSocket对象的send()方法发送消息,通过onmessage事件接收消息。维持连接:WebSocket连接一旦建立,客户端和服务器之间的通信通道就会一直保持打开状态,直到其中一方主动关闭连接或出现异常情况。总结:WebSocket连接的建立过程是通过WebSocket对象的构造函数发起连接请求,服务器接受连接请求后进行握手,握手成功后建立双向通信通道,保持连接状态,实现实时双向通信的功能。websocket断线之后的措施当WebSocket连接断开时,可以采取以下几种处理方式:重新连接:在WebSocket连接断开后,可以在客户端进行重新连接尝试。可以使用定时器或指数退避等策略来控制重新连接的频率,避免过于频繁的重连请求。错误处理:在WebSocket连接断开时,可以监听WebSocket对象的onerror事件,并在事件处理程序中进行错误处理,如输出错误日志或执行特定的错误处理逻辑。显示断开提示:在WebSocket连接断开时,可以在界面上显示断开连接的提示信息,让用户知晓连接状态,并提供相应的操作,如重新连接按钮等。断线重连策略:可以根据业务需求制定断线重连策略,比如在网络环境较差的情况下,可以增加断线重连次数或延长重连间隔。自动重连:可以通过代码逻辑实现自动重连的功能,即在WebSocket连接断开时自动触发重连操作,而不需要用户手动点击重新连接按钮。总的来说,处理WebSocket连接断开的方式可以根据具体业务需求和用户体验来进行调整和优化,保证连接的稳定性和及时性。websocket兜底WebSocket兜底是指在WebSocket连接不可用或断开的情况下,采用其他通信方式来实现类似的功能。WebSocket兜底可以增强应用程序的可靠性和容错性,确保在WebSocket不可用时仍然能够正常进行通信。常见的WebSocket兜底方案包括:轮询:在不支持WebSocket的浏览器中,可以使用轮询的方式来实现实时通信。即通过定时器定期向服务器发送请求,从而获取最新的数据。长轮询(Long Polling):长轮询是一种改进的轮询技术,客户端向服务器发送请求,服务器保持请求打开直到有新数据可用或超时。如果服务器有新数据,则立即返回给客户端,客户端处理完数据后再发送新的请求。Server-Sent Events (SSE):SSE是一种支持服务器向客户端推送数据的技术。在不支持WebSocket的情况下,可以使用SSE来实现实时通信。Comet:Comet是一种将服务器推送数据到客户端的技术,可以实现类似实时通信的效果。需要注意的是,WebSocket是一种双向通信协议,能够实现全双工通信,而轮询、长轮询、SSE和Comet等兜底方案都是基于HTTP协议的单向通信方式,无法实现全双工通信。因此,在选择兜底方案时,需要根据具体需求和应用场景来进行权衡和选择。
点赞 2
评论 1
全部评论
推荐
最新
楼层
暂无评论,快来抢首评~
相关推荐
07-22 18:00
门头沟学院 机械工程师
避雷!秋招速腾聚创进人才库了!
双九bg,面试的失效分析,一面时候hr说我表现很好,是他面试的表现得非常优秀的,玛德还以为能有机会。结果等了一周就发感谢信了,真的绷不住了。狠狠避雷
速腾聚创一面76人在聊
点赞
评论
收藏
分享
07-21 18:14
湖南工业大学 机械工程师
实习没活干了,mt跟我说放心大胆玩
遇到神仙公司!神仙mt姐姐!人美心善!实习第二天都没有什么事,我一个人坐在工位上发呆mt姐姐直接微信告诉我,想休息就光明正大的休息,没人会care呜呜呜,真是个好人啊我哪里修来的福气,成为你的实习生!!
鲁大牛:
我:哥,我手头没什么活了 mt:你就自己找点儿事干就行。
实习生的蛐蛐区
点赞
评论
收藏
分享
07-08 01:01
重庆大学 嵌入式软件开发
怎么提前批全挂啊?兄弟们帮我看下简历该怎么修改
实习经历没有,这个没办法,导师不放实习,兄弟们看看我这简历问题出在哪,投的是嵌入式软开岗位。
码农索隆:
你是块金子,但是不好意思,敢参加提前批的人,谁不是快金子
点赞
评论
收藏
分享
06-10 11:37
已编辑
陕西理工大学 Java
东软
有点抽象,面了7分钟,然后就过了。真点击即送。问了下体重啥的,然后让我用日语介绍了下,讲了下项目,就没了。???
阿14:
在东软摸鱼算不算抗日
东软集团开奖3人在聊
点赞
评论
收藏
分享
不愿透露姓名的神秘牛友
昨天 15:11
小红书提前批简历挂
26届工科,bg普通的2本9硕还挺想进小红书的,有没被挂的吗?他们要啥样的人啊
点赞
评论
收藏
分享
评论
点赞成功,聊一聊 >
点赞
收藏
分享
评论
提到的真题
返回内容
全站热榜
更多
1
...
实习包装不是吹牛皮,要怎么包装看这里
4.3W
2
...
入我滴滴!早十晚六 !
4384
3
...
百度一二面凉经
3221
4
...
再再再再强调一遍!秋招不要装逼
2346
5
...
百度提前批一面:面试官居然让我手撕两数之和???最奇幻的一轮面试,结束还说.......
2272
6
...
河南萌新联赛2025第(二)场:河南农业大学_题解
2175
7
...
百度一面面经7.14
2054
8
...
《重生之我在牛客捞金》
1860
9
...
滴滴提前批面经
1786
10
...
字节实习第三天10点下班,哭了
1759
创作者周榜
更多
正在热议
更多
#
哪些公司开提前批了?
#
22197次浏览
238人参与
#
实习如何「偷」产出?
#
45803次浏览
1173人参与
#
风评不好的公司,你会去吗?
#
53403次浏览
386人参与
#
你今年的平均薪资是多少?
#
133558次浏览
682人参与
#
除了主业以外,你还有哪些其他收入?
#
10575次浏览
185人参与
#
互联网公司评价
#
400860次浏览
3836人参与
#
校招阶段,学历VS技术哪个更重要?
#
15851次浏览
175人参与
#
不卡学历的大厂有哪些?
#
25362次浏览
200人参与
#
节后第一天上班,我的精神状态
#
13307次浏览
117人参与
#
签约/解约注意事项
#
696586次浏览
4068人参与
#
职场新人体验
#
21699次浏览
205人参与
#
腾讯音乐求职进展汇总
#
97873次浏览
570人参与
#
正在实习的碎碎念
#
1453854次浏览
13469人参与
#
硬件人求职现状
#
434223次浏览
4539人参与
#
实习打杂,要跑路吗
#
17174次浏览
197人参与
#
宁德时代求职进展汇总
#
122593次浏览
650人参与
#
Offer比较,你最看重什么?
#
191303次浏览
1301人参与
#
校园里的破防时刻
#
9869次浏览
109人参与
#
社恐入职新公司如何融入团队
#
11651次浏览
63人参与
#
你投递的公司有几家约面了?
#
108579次浏览
776人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务