WebSocket+SLB(负载均衡)会话保持解决重连问题

网上科普有关“WebSocket+SLB(负载均衡)会话保持解决重连问题”话题很是火热,小编也是针对WebSocket+SLB(负载均衡)会话保持解决重连问题寻找了一些与之相关...

网上科普有关“WebSocket+SLB(负载均衡)会话保持解决重连问题”话题很是火热,小编也是针对WebSocket+SLB(负载均衡)会话保持解决重连问题寻找了一些与之相关的一些信息进行分析,如果能碰巧解决你现在面临的问题,希望能够帮助到您。

写在最前面:由于现在游戏基本上采用全球大区的模式,全球玩家在同一个大区进行游戏,传统的单服模式已经不能够满足当前的服务需求,所以现在游戏服务器都在往微服务架构发展。当前我们游戏也是利用微服务架构来实现全球玩家同服游戏。

玩家每次断线(包括切换网络/超时断线)后应该会重新连接服务器,重连成功的话可以继续当前情景继续游戏,但是之前写的底层重连机制一直不能生效,导致每次玩家断线后重连都失败,要从账号登陆开始重新登陆,该文章写在已经定位了重连问题是由SLB引起后,提出的解决方案。

每次重连后,客户端向SLB发送建立连接,SLB都会重新分配一个网关节点,导致客户端连接到其他网关,重连失败。

会话保持的作用是什么?

开启SLB会话保持功能后,SLB会记录客户端的IP地址,在一定时间内,自动将同一个IP的连接转发到上次连接的网关。

在网络不稳定的情况下,游戏容易心跳或者发包超时,开启会话保持,能解决大部分情况下的重连问题。

但是在切换网络的时候,手机网络从Wifi切换成4G,自身IP会变,这时候连接必定和服务器断开,需要重新建立连接。由于IP已经变化,SLB不能识别到是同一个客户端发出的请求,会将连接转发到其他网关节点。所以使用TCP连接的情况下,SLB开启会话保持并不能解决所有的重连问题。

另外某些时刻,手机频繁开启和断开WI-FI,有时候可能不会断开网络,这并不是因为4G切换WI-FI时网络没断开,从4G切换到Wi-Fi网络,因为IP变了,服务器不能识别到新的IP,连接肯定是断开的。这时候网络没断开,主要是因为现在智能手机会对4G和Wi-Fi网络做个权重判断,当Wi-Fi网络频繁打开关闭时,手机会判断Wi-Fi网络不稳定,所有流量都走4G。所以网络没断开是因为一直使用4G连接,才没有断开。想要验证,只需要切换Wi-Fi时,把4G网络关闭,这样流量就必定走Wi-Fi。

上面说过,四层的TCP协议主要是基于IP来实现会话保持。但是切换网络的时候客户端的IP会变。所以要解决切换网络时的重连问题,只有两个方法:1. 当客户端成功连接网关节点后,记录下网关节点的IP,下次重连后不经过SLB,直接向网关节点发送连接请求。2.使用 SLB的七层(HTTP)转发服务。

当客户端经过SLB将连接转发到网关时,二次握手验证成功后向客户端发送自己节点的IP,这样客户端下次连接的时候就能直接连接网关节点。但是这样会暴露网关的IP地址,为安全留下隐患。

如果不希望暴露网关的IP地址,就需要增加一层代理层,SLB将客户端请求转发到代理层,代理层再根据客户端带有的key,转发到正确的网关节点上。增加一层代理层,不仅会增加请求的响应时间,还会增加整体框架的复杂度。

阿里云的七层SLB会话保持服务,主要是基于cookie的会话保持。客户端在往服务器发送HTTP请求后,服务器会返回客户端一个Response,SLB会在这时候,将经过的Response插入或者重写cookie。客户端获取到这个cookie,下次请求时会带上cookie,SLB判断Request的Headers里面有cookie,就将连接转发到之前的网关节点。

HTTP是短链接,我们游戏是长连接,所以用HTTP肯定不合适。但是可以考虑基于HTTP的WebSocket。

什么是WebSocket?

WSS(Web Socket Secure)是WebSocket的加密版本。

SLB对WebSocket的支持

查看阿里云SLB文档对WS的支持,说明SLB是支持WS协议的,并且SLB对于WS无需配置,只需要选用HTTP监听时,就能够转发WS协议。说明WS协议在SLB这边看来就是一个HTTP,这样WS走的也是七层的转发服务。只要SLB能够正常识别WS握手协议里Request的cookie和正常识别服务器返回的Response并且往里面插入cookie,就可以利用会话保持解决重连问题。

Go语言实现WS服务器有两种方法,一种是利用golang.org/x/net下的websocket包,另外一种方法就是自己解读Websocket协议来实现,由于WS协议一样是基于TCP协议之上,完全可以通过监听TCP端口来实现。

客户端发送Request消息

服务器返回Response消息

其中服务器返回的Sec-WebSocket-Accept字段,主要是用于客户端需要验证服务器是否支持WS。RFC6455文档中规定,在WebSocket通信协议中服务端为了证实已经接收了握手,它需要把两部分的数据合并成一个响应。一部分信息来自客户端握手的Sec-WebSocket-Keyt头字段:Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==。对于这个字段,服务端必须得到这个值(头字段中经过base64编码的值减去前后的空格)并与GUID"258EAFA5-E914-47DA-95CA-C5AB0DC85B11"组合成一个字符串,这个字符串对于不懂WebSocket协议的网络终端来说是不能使用的。这个组合经过SHA-1掩码,base64编码后在服务端的握手中返回。如果这个Sec-WebSocket-Accept计算错误浏览器会提示:Sec-WebSocket-Accept dismatch

如果返回成功,Websocket就会回调onopen事件

游戏服务器的使用的TCP协议,是在协议的包头使用4Byte来声明本协议长度,然后将协议一次性发送。但是在WS协议是通过Frame形式发送的,会将一条消息分为几个frame,按照先后顺序传输出去。这样做会有几个好处:

websocket的协议格式:

参数说明如下:

阿里云的SLB开启HTTP监听后,会检查过往的Request和Response请求,收到服务器返回的Response后,会往Response插入一个Cookie

客户端收到服务器的Response后,可以在Header中查到有个“Set-Cookie”字段,里面是SLB插入的Cookie值

客户端断开连接后,下次发送请求需要往Headers插入Cookie字段

分别在阿里云的两台ECS实例上部署WS服务器,打开8000端口,开启一个SLB服务,SLB服务选择HTTP方式监听,并且打开会话保持功能,Cookie处理方式选择植入Cookie。Demo服务器没有做HTTP健康监听的处理,健康检查这块可以先关掉。

在两台ECS上启动WS服务器,然后本地运行客户端,分别测试两台服务器是否能正常连接,测试完毕后,测试SLB能否正常工作。服务器和SLB都正常的情况下,运行客户端,客户端会得到以下结果

收到的三次Cookie都相同,说明Cookie是有正常植入工作的,并且三次都被SLB正确抓取了。

收到的三次serverId也都是同样的值,说明三次都是同一个ECS上的服务器响应。

至此,验证成功。

Websocket+SLB会话保持能够解决超时重连和切换网络时重连的问题。

参考:

阿里云会话保持

解答Wi-Fi与4G网络切换的困惑

WebSocket的实现原理

阿里云SLB对WebSocket的支持

HTTP Headers和Cookie

关于“WebSocket+SLB(负载均衡)会话保持解决重连问题”这个话题的介绍,今天小编就给大家分享完了,如果对你有所帮助请保持对本站的关注!

本文来自作者[由丹丹]投稿,不代表长隆号立场,如若转载,请注明出处:https://clcgzw.com/cshi/202502-1528.html

(281)

文章推荐

  • BBC解剖了一个胖子遗体拍成了纪录片.看完还有什么理由不减肥

    网上有关“BBC解剖了一个胖子遗体拍成了纪录片.看完还有什么理由不减肥”话题很是火热,小编也是针对BBC解剖了一个胖子遗体拍成了纪录片.看完还有什么理由不减肥寻找了一些与之相关的一些信息进行分析,如果能碰巧解决你现在面临的问题,希望能够帮助到您。此文中有些过于血腥,相当重口心理素质低者建议谨慎浏

    2024年12月15日
    9
  • 汽车电瓶没电什么症状

    网上科普有关“汽车电瓶没电什么症状”话题很是火热,小编也是针对汽车电瓶没电什么症状寻找了一些与之相关的一些信息进行分析,如果能碰巧解决你现在面临的问题,希望能够帮助到您。汽车电池的正常使用寿命为2-3年,然而不同车型的使用对汽车电池的损坏程度不同,会导致电量的加速消耗。汽车电池故障的症状1.这辆车

    2025年02月18日
    286
  • 预警等级划分颜色

    网上科普有关“预警等级划分颜色”话题很是火热,小编也是针对预警等级划分颜色寻找了一些与之相关的一些信息进行分析,如果能碰巧解决你现在面临的问题,希望能够帮助到您。蓝色暴雪预警信号:12小时内降雪量将达到4毫米以上,或者已达4毫米以上且降雪持续,可能对交通或者农牧业有影响。台风蓝色预警信号:24小时内

    2025年02月19日
    339
  • 深圳社保三档缴费标准

    网上科普有关“深圳社保三档缴费标准”话题很是火热,小编也是针对深圳社保三档缴费标准寻找了一些与之相关的一些信息进行分析,如果能碰巧解决你现在面临的问题,希望能够帮助到您。深圳社保分三档,档数越高,其以后享受的待遇也越好,当然,各个档数每月所交的费用也不一样。那么深圳社保三档多少钱一个月呢?下面让我们

    2025年02月19日
    354
  • 很多的英文

    网上科普有关“很多的英文”话题很是火热,小编也是针对很多的英文寻找了一些与之相关的一些信息进行分析,如果能碰巧解决你现在面临的问题,希望能够帮助到您。很多的英文单词是many或lot.many的英式读法是['meni];美式读法是['meni]。单词直接源自古英语的manig,意为多。作形容词意思是

    2025年02月19日
    335
  • 暴雨洪水二级应急响应预案(通用5篇)_1

    网上科普有关“暴雨洪水二级应急响应预案(通用5篇)”话题很是火热,小编也是针对暴雨洪水二级应急响应预案(通用5篇)寻找了一些与之相关的一些信息进行分析,如果能碰巧解决你现在面临的问题,希望能够帮助到您。在应对不同的突发性危机事件时应急预案所能发挥的作与功效用不尽相同。在面对突发情况时,我们需要提前

    2025年02月21日
    339
  • 女性上环后多久可以同房?

    网上科普有关“女性上环后多久可以同房?”话题很是火热,小编也是针对女性上环后多久可以同房?寻找了一些与之相关的一些信息进行分析,如果能碰巧解决你现在面临的问题,希望能够帮助到您。现在很多女性响应国家号召,尝试上环这种节育措施,那么,关于上环的一些知识,你都了解吗?女性上环疼吗女人上

    2025年02月21日
    317
  • 初学舞蹈基本功如何练

    网上科普有关“初学舞蹈基本功如何练”话题很是火热,小编也是针对初学舞蹈基本功如何练寻找了一些与之相关的一些信息进行分析,如果能碰巧解决你现在面临的问题,希望能够帮助到您。1、压腿这是舞蹈基础训练中最为基本的训练内容,分别为压前、旁、后腿。压腿的练习有助于打开学生腿部关节的韧带。压腿时要注意腿部关节的

    2025年02月24日
    352
  • 股票技术指标 分类-

    网上科普有关“股票技术指标分类?”话题很是火热,小编也是针对股票技术指标分类?寻找了一些与之相关的一些信息进行分析,如果能碰巧解决你现在面临的问题,希望能够帮助到您。主要包括趋势型指标、超买超卖型指标、人气型指标、大势型指标等内容。一、趋势型指标1、MA(移动平均线)移动平均的分类:根据

    2025年02月24日
    312
  • 服务器raid是什么

    网上科普有关“服务器raid是什么”话题很是火热,小编也是针对服务器raid是什么寻找了一些与之相关的一些信息进行分析,如果能碰巧解决你现在面临的问题,希望能够帮助到您。服务器raid是什么服务器RAID是一种数据存储技术,它通常使用多个硬盘驱动器来创建一个逻辑驱动器,以提高数据的可靠性和性能。RA

    2025年02月25日
    227

发表回复

本站作者后才能评论

评论列表(4条)

  • 由丹丹
    由丹丹 2025年02月25日

    我是长隆号的签约作者“由丹丹”!

  • 由丹丹
    由丹丹 2025年02月25日

    希望本篇文章《WebSocket+SLB(负载均衡)会话保持解决重连问题》能对你有所帮助!

  • 由丹丹
    由丹丹 2025年02月25日

    本站[长隆号]内容主要涵盖:国足,欧洲杯,世界杯,篮球,欧冠,亚冠,英超,足球,综合体育

  • 由丹丹
    由丹丹 2025年02月25日

    本文概览:网上科普有关“WebSocket+SLB(负载均衡)会话保持解决重连问题”话题很是火热,小编也是针对WebSocket+SLB(负载均衡)会话保持解决重连问题寻找了一些与之相关...

    联系我们

    邮件:长隆号@sina.com

    工作时间:周一至周五,9:30-18:30,节假日休息

    关注我们