Heroku返回400错误请求响应(Socket.IO Node.js)

时间:2019-08-12 10:00:27

标签: javascript node.js heroku socket.io

每次Socket.IO连接到我的Heroku应用程序时,都会返回一个400错误的请求。我该如何解决?

我有一个使用Socket.IO的Node.js Web应用程序。在本地开发中没有问题,但是当我将应用程序部署到Heroku时,每个socket.io连接都会返回400 Bad Request。我尝试将传输方法手动设置为websocket,轮询和两者,但是仍然无法正常工作。我还为我的dyno打开了会话亲和力。

我在服务器中

const app = express();
const server = http.createServer(app);
const io = socketIO(server);

const namespace = io.of('/client-web-app');

客户端通过

进行连接
const socket = io('/client-web-app')

像平常一样。

浏览器控制台记录以下内容:

polling-xhr.js:269 POST https://<app-name>.herokuapp.com/socket.io/?EIO=3&transport=polling&t=Mo5GHwF&sid=7Pn_tN47tE2NqFKMAAAc 400 (Bad Request)

还有该请求的GET和websocket版本

与此同时,Heroku记录以下内容:

 at=info method=POST path="/socket.io/?EIO=3&transport=polling&t=Mo5GjRq&sid=wSTQhI8NQRpLbb3xAAAm" host=<app-name>.herokuapp.com request_id=da83df98-0522-4e0a-b0cc-fdbc3304b7f8 fwd="110.54.138.89" dyno=web.1 connect=0ms service=2ms status=400 bytes=296 protocol=https
2019-08-12T09:57:28.339289+00:00 app[web.1]: device disconnected
2019-08-12T09:57:28.628468+00:00 heroku[router]: at=info method=GET path="/socket.io/?EIO=3&transport=polling&t=Mo5GjRs&sid=wSTQhI8NQRpLbb3xAAAm" host=<app-name>.herokuapp.com request_id=99ba8299-6f8a-448f-a8ce-d0b34b4a062f fwd="110.54.138.89" dyno=web.1 connect=0ms service=2ms status=400 bytes=228 protocol=https

出于某种原因,用<app-name>替换了我的实际应用程序名称。

1 个答案:

答案 0 :(得分:1)

找到了解决我自己问题的方法。如果有人遇到与我相同的问题,请在此处发布。只是明确声明要使用websocket作为传输方式。

在您的socket.io服务器中:

const app = express();
const server = http.createServer(app);
const io = socketIO(server, {transports: ['websocket']});

并在您的socket.io客户端中:

const socket = io('/client-web-app', {transports: ['websocket']});

似乎Heroku仅支持websocket作为socket.io传输。