envoy 代理 socket.io

栏目: Html5 · 发布时间: 5年前

内容简介:最近在做web 长连接消息通道的方案与实现, 目前web 的方案主要有websocket。 后来经过调研发现socket.io 的浏览器兼容性更好。于是使用socket.io 作用通信连接。本文记录在此过程中遇到的问题。主要的问题:

envoy 代理 socket.io

最近在做web 长连接消息通道的方案与实现, 目前web 的方案主要有websocket。 后来经过调研发现socket.io 的浏览器兼容性更好。于是

使用socket.io 作用通信连接。本文记录在此过程中遇到的问题。

主要的问题:

envoy 代理socket.io .

<h2> 1. socket.io </h2>

socket.io 集成了websocket 和polling,并可以感知浏览器的是否支持websocket, 建立websocket 连接,如果不支持websocket
就使用ajax polling. 故兼容性比较好, 具体可以google socket.io.

2. 为什么会有envoy 代理socket.io ?

这和我们是实现方案有关, 下面是我们的服务简单的部署拓扑。

![clipboard.png](/img/bVbmEbv)

这个方案是基于mesh service 的sidecar 方式部署, 前面有一个front-Envoy 作为一个接入层。

front-evnoy 其实就是在 docker 里部署一个envoy。

后端的services 是一个服务的集群, 上图有2个socket.io service 组成的连接管理服务。

总体来看,数据经过两次代理,sidecar 内地代理很简单,配置简单,只有配置envoy websocket 和http 就可以。

只有设置route_config 相应virtual_hosts 设置use_websocket 为true 。

另外一个代里是本文记录的重点。

就是front-evnoy 到后端的service 集群。 简单分析可知,socket.io service 其实是一个有状态的服务, 它一个连接管理器。

假设client A 要使用socket.io 建立长连接, front-envoy 要正常工作必须保证, A 的后续的所用的包都发送到后端的同一个service.

这就是envoy 如何代理socket.io 的问题。

3. envoy 的负载均衡

envoy 支持很多很多中负载均衡方式, 但是目前满足我们需求的只有ring hash 这种负载均衡。

可以参考envoy 文档

envoy ring hash

ring hash 可以配置一个http header的字段作用hash key.

经考察,我使用了这个x-forwarded-for字段, x-forwarded-for 这字段一般填的是client 的ip.

部分配置如下:

"route_config":
        {
                  "virtual_hosts":
                   [
                     {
                         "name" : "backend",
                         "domains" : ["*"],
                         "routes" : [
                             { 
                               "prefix" : "/",
                               "cluster": "websocket_cluster",
                               "use_websocket": true,
                               "hash_policy": {
                                 "header_name": "x-forwarded-for"
                               }
                             }
                         ]
                      } 
                    ]
                 },


 ...

          {
          "name":"websocket_cluster",
          "type":"static",
          "connect_timeout_ms":2500,
          "lb_type":"ring_hash",
          "ring_hash_lb_config": {
            "minimum_ring_size": 1024,
            "use_std_hash": false
          }, 
          "hosts":[{"url":"tcp://10.10.62.120:3000"},{"url":"tcp://10.10.62.121:3000"}]
       }

4. e


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

写给大家看的Web设计书

写给大家看的Web设计书

Robin Williams、John Tollett / 苏金国、刘亮 / 人民邮电出版社 / 201005 / 69.00元

在这个网络时代,Web设计几乎已经成为每个人生活的必备技能。如果你想自力更生创建一个网站,或者认为自己的网站在设计上还不尽如人意,希望它看上去更具创意和专业性,那么本书正是为你准备的! 作者Robin和John先采用通俗易懂的方式将有关基础知识娓娓道来,比如Internet、搜索信息、构建简单网页等,然后为我们奉上了精妙的技巧、技术和设计示例来启发大家的设计灵感,比如Web基本设计原则、实现......一起来看看 《写给大家看的Web设计书》 这本书的介绍吧!

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

SHA 加密
SHA 加密

SHA 加密工具

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具