美文网首页
WSS升级为TCP的配置问题

WSS升级为TCP的配置问题

作者: 买了一堆书还没读的小胖子 | 来源:发表于2019-11-13 11:12 被阅读0次

背景

​ 微信小游戏、Facebook小游戏等基于HTML5的网页游戏采用的是WebSocket协议,而现在平台提供的聊天服务采用的是TCP连接,协议不一致,需要解决。

方案

​ 在客户端和聊天服之间搭建一个代理,命名为e-ws. 其作用是将客户端到代理的WebSocket连接升级为TCP连接,同时建立一个代理至聊天服之间的TCP连接,使客户端与聊天服之间的信息互通,从而达到H5客户端连接聊天服的目的。

配置

​ 代理e-ws的配置包括以下几部分。

AWS配置
环境 ALB 侦听器协议/端口 目标组 服务域名 完整服务地址 协议/端口
Beta beta HTTPS 443 beta-e-ws-tg e-ws-beta.x.com wss://e-ws-beta.x.com:443 HTTP/x
Gold gold HTTPS 443 e-ws-tg e-ws.x.com wss://e-ws.x.com:443 HTTP/x
Nginx配置

​ 由于客户端是采用WebSocket协议连接代理服务器e-ws, 需要确认连接e-ws服务的客户端IP所在地理位置(国内或国外,可能有误判)。当客户端IP被判定是在国外时,就直连代理服务器;但当客户端IP被判定在国内时,就会通过ALB走加速通道。默认设置在进入ALB时的Nginx是不支持WebSocket协议的,会将webso的请求头字段(Connection: upgrade、Upgrade: websocket)丢弃,导致该请求到达e-ws后被判定为非WebSocket协议,返错至客户端。解决方式就是在对应的Nginx配置文件内添加以下设置:

添加内容
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
空闲超时/心跳检测

​ 现有的客户端SDK都做了与聊天服务器之间的心跳检测,每30秒发送一次心跳包。

​ 在-ws代理服务所在的ALB上,有一项属性名为“空闲超时”,当前设置为60秒。也就是说如果客户端或服务器60秒内没有数据传输,则该连接会被ALB主动断开。在搭建起e-ws服务后采用简单的网页进行Websocket连接测试时,可以观察到WebSocket连接建立后1分钟内如果不发送消息至服务器,该链接就会断开。

相关文章

网友评论

      本文标题:WSS升级为TCP的配置问题

      本文链接:https://www.haomeiwen.com/subject/jyrhictx.html