socket.io 的快速代理
Posted
技术标签:
【中文标题】socket.io 的快速代理【英文标题】:Express proxy for socket.io 【发布时间】:2020-01-24 17:02:16 【问题描述】:运行微服务架构,我想将我的所有 socket.io 流量通过我的网关转发到 socket.io 微服务。我的网关正在运行快递。我当前的实现如下所示:
import proxy from 'http-proxy-middleware';
import express from 'express';
import cors from 'cors';
const app = express();
app.use(cors())
// proxy middleware options
const options =
target: 'http://127.0.0.1:1234/test',
changeOrigin: true,
secure: false,
ws: true
;
const exampleProxy = proxy(options);
app.use('/socket.io', exampleProxy);
app.use('/upgrade', exampleProxy);
app.listen(port);
奇怪的是 GET 请求通过我的服务,所以我得到了套接字连接,但是当尝试从 socket.io 客户端(POST 请求)发出事件时,请求超时。
在这种情况下,我的快递服务器通过摩根记录以下内容:
[HPM] Error occurred while trying to proxy request /socket.io/?EIO=3&transport=polling&t=MrZfNeU&sid=cR-5g0531PU9XxiGAAAN from localhost:2999 to http://127.0.0.1:1234/test (ECONNRESET) (https://nodejs.org/api/errors.html#errors_common_system_errors)
我的前端显示cors错误:
Access to XMLHttpRequest at 'http://localhost:8888/socket.io/?EIO=3&transport=polling&t=MrZfNeU&sid=cR-5g0531PU9XxiGAAAN' from origin 'http://localhost:3000' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
当直接连接到 socket.io 服务器时,它可以完美运行。可能是什么问题?谢谢!
【问题讨论】:
【参考方案1】:问题已通过将 bodyParser 置于代理下方解决,如以下 comment 中所述。
【讨论】:
【参考方案2】:您显然收到了 CORS 错误。 (CORS 是跨域资源共享)
你能激活 cors 中间件吗?在快递方面。
来源:https://expressjs.com/en/resources/middleware/cors.html
【讨论】:
我尝试过使用app.use(cors())
,但没有帮助。
你可以看看并试试这个:github.com/saikat/react-apollo-starter-kit/issues/…
是的,我尝试同时添加changeOrigin
和secure
,但不幸的是无济于事。以上是关于socket.io 的快速代理的主要内容,如果未能解决你的问题,请参考以下文章
nginx 作为 NodeJS+socket.io 的代理:客户端未收到通知
如何通过 socks5 代理使用 JavaScript socket.io-client 库?
如何将 Apache 配置为代理 socket.io 服务器
基于socket.io +koa2 +天行机器人 实现简单人机实时通讯(nginx处理socket.io https代理问题)