Node.js 带Heroku的Socket.io端口配置

Node.js 带Heroku的Socket.io端口配置,node.js,reactjs,heroku,socket.io,Node.js,Reactjs,Heroku,Socket.io,我正在尝试让socket.io在我的heorku应用程序上运行,但我想我在定义端口时遇到了一些问题。在后端,我让我的express应用程序监听process.env端口或5000,让我的socket.io端口监听8000 Node.js const express = require("express"); const app = express(); const server = require('http').Server(app) const io = require('socket.io

我正在尝试让socket.io在我的heorku应用程序上运行,但我想我在定义端口时遇到了一些问题。在后端,我让我的express应用程序监听process.env端口或5000,让我的socket.io端口监听8000

Node.js

const express = require("express");
const app = express();
const server = require('http').Server(app)
const io = require('socket.io')(server)

const socketPort = 8000;
io.listen(socketPort);

const port = process.env.PORT || 5000;
app.listen(port, () => console.log(`Server running on port ${port} !`));
const socket = io('http://localhost:8000')

//Open connection to backend
socket.on('connect', ()=>{
    console.log("Connected");           
})
在我的前端,我有一个套接字将请求路由到localhost:8000

Reactjs

const express = require("express");
const app = express();
const server = require('http').Server(app)
const io = require('socket.io')(server)

const socketPort = 8000;
io.listen(socketPort);

const port = process.env.PORT || 5000;
app.listen(port, () => console.log(`Server running on port ${port} !`));
const socket = io('http://localhost:8000')

//Open connection to backend
socket.on('connect', ()=>{
    console.log("Connected");           
})
当我在本地运行它时,它工作得很好,但我无法让它在Heroku上工作-
gethttp://localhost:8000/socket.io/?EIO=3&transport=polling&t=MszLUDm 网络::错误连接被拒绝

有没有具体的方法来设置这些端口?据我所知,我只能设置一个process.env端口。我是否应该在前端的“localhost:8000”中加入一些内容


谢谢

在客户端,我只声明了如下套接字:

const socket = io();

完全忽略了
localhost:5000
部分。

在客户端,我只声明了如下套接字:

const socket = io();

去掉
localhost:5000
部分。

当我使用node.js和express时,我得到了以下行:
var http=require('http').Server(app),然后我可以将其传递到
var io=require('socket.io')(http)。因为您需要一个单独的Http实例,可以将其传递到套接字:。也许这对你有帮助;)。谢谢汤姆-我的原始代码中确实包含了这一点。对我的帖子做了一些修改,以便澄清。谢谢你的意见!那么,
io.听
有必要吗?我不记得在使用node.js和express时使用过itWell,我得到了以下命令:
var http=require('http').Server(app),然后我可以将其传递到
var io=require('socket.io')(http)。因为您需要一个单独的Http实例,可以将其传递到套接字:。也许这对你有帮助;)。谢谢汤姆-我的原始代码中确实包含了这一点。对我的帖子做了一些修改,以便澄清。谢谢你的意见!那么,
io.听
有必要吗?我不记得用过它