vite websocket 公网 端口 连接异常问题

vite websocket 端口连接异常问题

 

在vite websocket 开发时,可能会遇到端口是写死的,如果公网地址或域名 跟 代码本地的端口不一致,websocket 会出现连接异常的情况

在浏览器调试中可以发现浏览器使用 ws://公网地址或域名:本地端口 或 wss://公网地址或域名:本地端口  去连服务器。

 

传统网络架构中,大家习惯于服务通过 防火墙 或者 代理服务器 发布出去,而且本地服务端口跟发布出去的公网地址端口往往不一致。

比如本地3000 或 24678 ,发布出去通常会用http 80 或 https 443。

关于此问题 vite 在 2021.5.29 之后的版本应该都已经解决

 

官方说明 

详细可以参考大佬在 github 关于此 功能 or bug 的讨论和 merge 过程:

https://github.com/vitejs/vite/pull/3578

官方配置说明参考如下:

https://vitejs.dev/config/#server-hmr

关于clientport 说明

clientPort 是一个高级选项,只在客户端的情况下覆盖端口,这允许你为 websocket 提供不同的端口,而并非在客户端代码中查找。如果需要在 dev-server 情况下使用 SSL 代理,这非常有用。

当使用 server.middlewareMode 或 server.https 时,你需将 server.hmr.server 指定为你 HTTP(S) 的服务器,这将通过你的服务器来处理 HMR 的安全连接请求。这在使用自签证书或想通过网络在某端口暴露 Vite 的情况下,非常有用。

 

关于解决方案

升级vite,在server.hmr中添加clientport,示例如下,主要内容就是加黑加粗部分。

{
        server: {
            host: true,
            port: 23456,
            open: true,
            proxy: {
                '/api': {
                    target: process.env.SERVER_URL,
                    changeOrigin: true,
                },
            },
            hrm: {
                clientPort: 80
            }
        },
}

 

另外nginx 代理ws 或wss 需要格外添加配置,参考文章

nginx 代理 wss/ws websocket 协议

 

posted @ 2021-12-09 21:31  i学笔记  阅读(3317)  评论(0编辑  收藏  举报