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

【计算机网络 - 基础问题】每日 3 题(四十七)

✍个人博客:https://blog.csdn.net/Newin2020?type=blog
📣专栏地址:http://t.csdnimg.cn/fYaBd
📚专栏简介:在这个专栏中,我将会分享 C++ 面试中常见的面试题给大家~
❤️如果有收获的话,欢迎点赞👍收藏📁,您的支持就是我创作的最大动力💪
📝推荐参考地址:https://www.xiaolincoding.com/(这个大佬的专栏非常有用!)

139. 怎么建立 WebSocket 连接?

我们平时刷网页,一般都是在浏览器上刷的,一会刷刷图文,这时候用的是 HTTP 协议,一会打开网页游戏,这时候就得切换成我们新介绍的 WebSocket 协议。

为了兼容这些使用场景。浏览器在 TCP 三次握手建立连接之后,都统一使用 HTTP 协议先进行一次通信。

  • 如果此时是普通的 HTTP 请求,那后续双方就还是老样子继续用普通 HTTP 协议进行交互,这点没啥疑问。
  • 如果这时候是想建立 WebSocket 连接,就会在 HTTP 请求里带上一些特殊的 header 头,如下:
Connection: Upgrade
Upgrade: WebSocket
Sec-WebSocket-Key: T2a6wZlAwhgQNqruZ2YUyg==\r\n

这些 header 头的意思是,浏览器想升级协议(Connection: Upgrade),并且想升级成 WebSocket 协议(Upgrade: WebSocket)。同时带上一段随机生成的 base64 码(Sec-WebSocket-Key),发给服务器。

如果服务器正好支持升级成 WebSocket 协议。就会走 WebSocket 握手流程,同时根据客户端生成的 base64 码,用某个公开的算法变成另一段字符串,放在 HTTP 响应的 Sec-WebSocket-Accept 头里,同时带上 101 状态码,发回给浏览器。HTTP 的响应如下:

HTTP/1.1 101 Switching Protocols\r\n
Sec-WebSocket-Accept: iBJKv/ALIW2DobfoA4dmr3JHBCY=\r\n
Upgrade: WebSocket\r\n
Connection: Upgrade\r\n

HTTP 状态码 = 200(正常响应)的情况,大家见得多了。101 确实不常见,它其实是指协议切换。

在这里插入图片描述

之后,浏览器也用同样的公开算法将base64 码转成另一段字符串,如果这段字符串跟服务器传回来的字符串一致,那验证通过。

在这里插入图片描述

就这样经历了一来一回两次 HTTP 握手,WebSocket 就建立完成了,后续双方就可以使用 Webscoket 的数据格式进行通信了。

在这里插入图片描述

140. WebSocket 的使用场景

WebSocket 完美继承了 TCP 协议的全双工能力,并且还贴心的提供了解决粘包的方案。

它适用于需要服务器和客户端(浏览器)频繁交互的大部分场景,比如网页/小程序游戏,网页聊天室,以及一些类似飞书这样的网页协同办公软件。

回到文章开头的问题,在使用 WebSocket 协议的网页游戏里,怪物移动以及攻击玩家的行为是服务器逻辑产生的,对玩家产生的伤害等数据,都需要由服务器主动发送给客户端,客户端获得数据后展示对应的效果。

141. Websocket 如何进行限流?

1、连接限制:通过限制连接数来控制服务器资源的使用情况。可以设置一个最大连接数,当连接数超过这个限制时,新的连接请求就会被拒绝。这种方法通常需要使用一些负载均衡器来实现。

2、速率限制:通过限制每个客户端的请求速率来控制服务器的负载。可以设置一个固定的速率,每个客户端只能在一定时间内发送一定数量的请求。这种方法通常需要使用一些中间件来实现,例如 Redis 等。

3、消息大小限制:通过限制每个消息的大小来控制服务器的负载。可以设置一个最大的消息大小,当消息大小超过这个限制时,消息就会被拒绝。这种方法通常需要在 WebSocket 协议的底层实现中进行处理。


http://www.kler.cn/news/357975.html

相关文章:

  • AI核身-金融场景凭证篡改检测YOLO原理
  • Redux (八) 路由React-router、嵌套路由、路由传参、路由懒加载
  • 【4.9】图搜索算法-BFS解打开转盘锁
  • 屏蔽小米电视广告的方法
  • 数据结构-复杂度
  • C语言导航 3.1运算符与表达式
  • 市场上几个跨平台开发框架?
  • 【含开题报告+文档+PPT+源码】基于SSM的景行天下旅游网站的设计与实现
  • C语言初阶小练习3(扫雷小游戏的代码实现及解读)
  • HCIE-Datacom题库_07_安全【11道题】
  • 解决DOTA-v2.0数据集上传结果至官网BUG: No space left on device
  • 性能工具之JMeter 通过Java API生成 BeanShell PreProcessor 脚本
  • Git客户端使用之命令行
  • 多表关联查询,join on 条件不生效,无法筛选记录
  • 单片机裸机程序 —— 设计模式
  • 机器人大功率主轴SycoTec 4060 ER-S汽车电机机芯焊缝铣削打磨加工
  • 数据结构-B树和B+树
  • java设计模式——装饰者模式
  • 详解equals底层原理
  • 【力扣打卡系列】滑动窗口与双指针(无重复字符的最长子串)