概述
WebSocket协议允许客户端和服务器之间进行实时的双向数据传输,从而确保了连接的持久性和低延迟。可以在云原生API网关中创建WebSocket API,实现WebSocket流量代理。
前提
已开通云原生API网关实例。
已部署后端WebSocket server服务。
云原生API网关中开启WebSocket支持
我们采用在MSE Nacos中注册后端WebSocket服务的方式进行服务部署,后端服务示例可部署demo应用(暴漏WebSocket应用路径为/ws/server)。
创建注册中心服务
前置条件
已开通云原生API网关实例和同VPC下的注册配置中心实例(Nacos引擎),已添加注册配置中心实例作为云原生API网关的服务来源。
后端服务已部署并注册到注册配置中心。
操作流程
进入云原生API网关控制台。
在顶部菜单栏选择资源池。
单击左侧导航栏实例 > 进入实例概览。
单击左侧导航栏服务 > 服务标签页。
单击左上角按钮 创建服务。
在弹出的页面中选择容器服务来源,选择要添加的服务所在的命名空间。
在服务列表中选择要添加目标服务,请求协议设置为WebSocket。
注册中心服务配置说明
| 配置 | 说明 |
|---|---|
| 命名空间 | 后端服务注册到注册配置中心的命名空间 |
| 请求协议 | 后端服务的协议,支持HTTP、HTTPS、GRPC、GRPCS、DUBBO,默认为HTTP |
| mTLS | 是否打开后端服务双向TLS认证(后端服务对网关证书认证) |
| 证书文件 | 后端服务开启双向TLS认证后,云原生网关提供的证书文件 |
| 私钥文件 | 后端服务开启双向TLS认证后,云原生网关提供的私钥文件 |
创建 WebSocketAPI
登录云原生API网关控制台。顶部菜单栏选择 "地域",然后再左侧导航栏选择 "API"。
单击 "创建API" ,然后单击WebSocket API卡片中的 "创建" 。
在 "创建WebSocket API" 面板中配置相关参数,单击 "确定"。
| 配置项 | 说明 |
|---|---|
| API名称 | 定义创建的API名称,API名称需要保证唯一 |
| 描述 | 填写API相关的描述 |
创建 WebSocket路由配置
路由请求path可设置为“/*”
WebSocket API下的路由管理方式和HTTP API下路由管理方式基本一致,可以参考相关文档。
登录云原生API网关控制台。顶部菜单栏选择 "地域",然后再左侧导航栏选择 "API"。
选择已创建的HTTP API,单击API名称进入API详情页。
单击 "创建路由"。
在 "创建路由" 弹出框填写路由相关配置,并单击 "保存" 或 "保存并发布" 按钮,如您单击的是 "保存" 按钮,则需要在 "路由列表" 页,单击操作列 "发布" 按钮发布路由;
路由配置的规则之间是“与”的关系,必须全部满足才算匹配,路由配置项说明如下:
| 参数 | 说明 |
|---|---|
| 路由名称 | 路由名称,用于标识一条路由规则。API内需要保证唯一 |
| 描述 | 路由描述 |
| 域名 | 用于和请求中的域名进行匹配,不填则任何请求都可以匹配;可选项从域名管理中添加的域名选择 |
| 路径 | 支持两种匹配方式: 等于:精确匹配。 前缀是:前缀匹配,如配置 /test,则能够匹配所有路径以 /test开头的请求 |
| 方法 | 匹配请求中的HTTP方法 |
| 优先级 | 当多个路由同时匹配一个请求时,路径匹配深度较大的路由优先;路径匹配相同的情况下,路由优先级高(数字大)的优先匹配 |
| 请求头(header) | 匹配请求中的HTTP header |
| 请求参数(Query) | 匹配请求中的HTTP query参数 |
| Cookie | 通过Cookie进行路由匹配,多个参数之间是“与”的关系 |
| 是否启用参数规整化匹配 | 启用后支持对参数进行取模,并根据取模结果进行精确或者范围匹配 |
| 参数类型 | 启用参数规整化匹配选择,支持Header、Query、Cookie |
| 是否Hash | 启用参数规整化匹配选择,是否对参数进行哈希处理后再取模,哈希函数为Java String hashCode |
| 取模数值 | 启用参数规整化匹配选择,自定义填写取模数值 |
| 标记类型 | 支持精确和匹配精确 精确匹配,可用英文逗号分隔多个精确值 范围:最大值和最小值均是闭区间,[min,max] |
| 所属实例 | 路由规则所属的实例 |
| 场景 | 当前支持单服务、多服务、标签路由、mock路由、重定向和dubbo代理 |
| 后端服务 | 根据选择的场景选择请求需要转发的后端服务 |
结果验证
可通过postman软件发起到网关的WebSocket请求,请求协议前缀为ws://或wss://。请求成功。