socketio 更改requsturl 实现nginx 代理多个服务端
首先这个问题的由来是在内网socketio 需要映射到外网,下面是我的请求相关信息
通过观察不难看出请求requesturl 为http:192.168.2.125/socket.io/?EIO=........................ 这里socket 与 http 的原理与关系不再说明,简单点来说就是要想建立socket 必须首先通过http 握手 然后upgrade 更新到socket连接,那么我将nignx 的配置文件配置如下,即可完成对socket 的外网代理
但是,有了一个新的问题,这个代理方式是一个应用服务器,假如我有多个应用服务器,用这个/socket.io 去匹配就不行了,于是有了,我想修改socket 默认请求地址的需求
socketio 前端主要应用的包为socketio 官网地址 https://socket.io/docs/ ,通过扒官网发现,设置socketioi url 的地方在 Manager 里 截图如下
这个path 就是可以修改url 的地方,但是使用方法官网没有提供,大概看了下这个设置需要实例化 Manager ,于是乎从官网下载 socketio 包翻下源码
源码是用ts 写的,但是写法和思路很多地方都跟java 很相似
简单说下我的理解,别应用的io 其实就是个 SocktIOClientStatic 的接口,接口内部定义了响应的属性,而Manager 就在里面,那么如果我想使用 io 只需要接口引用方式引入Manager 然后再实例化就ok 了
下面是io 实例化的两种方式
这样设置后,socketio requsturl 更改成了sockettest,问题解决。
后面其实还碰到后台的问题,也许是socket 开发时大家 都将socketio 作为默认路径,前端虽然修改了请求地址,但是后台报错 404 ,我用的后台socketio 时 flask-socketio ,相关的配置需要重新在middleware 中修改,这里不再详细说明。