WSS升级为TCP的配置问题

背景

​ 微信小游戏、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分钟内如果不发送消息至服务器,该链接就会断开。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 基于websocket单台机器支持百万连接分布式聊天(IM)系统 本文将介绍如何实现一个基于websocket分布...
    link1st阅读 8,553评论 0 3
  • 原文地址:http://www.ibm.com/developerworks/cn/java/j-lo-WebSo...
    敢梦敢当阅读 12,888评论 0 50
  • 大家好,我是侯总(侯维山)的人,来自山东鑫山力机械设备有限公司的马秀婷,今天是2018年11月16日,我的日精进第...
    鑫山力马秀婷阅读 1,463评论 0 2
  • 2018年的11月中旬,我跟同行朋友合作,开了一个口腔门诊。 从开始运营到现在的4个多月里,经历了大大小小的各种事...
    敏姐细语阅读 2,778评论 2 2
  • 之前一位星友@Sara提到了一个叫做逆转理论的词,引起了我的兴趣,之后研究了一下,做个分享。 逆转理论由阿普特尔与...
    源境阅读 5,459评论 0 0

友情链接更多精彩内容