【发布时间】:2021-02-02 20:59:19
【问题描述】:
我正在使用 Elastic Load Balancer 在 AWS EC2 实例上运行带有 node/express 的 React 应用程序。
当我直接访问 EC2 实例时,Socket io 运行良好,但只要我使用 ELB url(http 或 https)访问应用程序,它就会返回 GET current url net::ERR_CONNECTION_REFUSED 每次 ping秒左右。
我已使用 AWS Certificate Manager 为负载均衡器创建公共证书,以便能够通过 https 访问应用程序。以下是我为 ELB 启用的侦听器:
在客户端,我设置了这样的套接字(与反应上下文一起使用):
let socket
const getMsg = (dispatch) => {
if(!socket){
socket = io(':3000', {secure: true})
socket.on('chat msg', function(msg){
dispatch({type:'RECEIVE_MSG', payload: msg})
})
}
}
const sendChat = (dispatch) => {
return async (value) => {
socket.emit('chat msg', value)
getMsg()
}
这是后端代码的一部分:
const app = express()
const http = require('http').createServer(app)
const io = require('socket.io')(http);
app.use(cors())
app.use(bodyParser.json())
app.use(methodOverride('_method'))
io.on('connection', socket =>{
console.log("new connection...")
socket.on('chat msg', async (msg) => {
io.emit('chat msg', msg)
});
})
const mongoUri = //hidden
mongoose.connect(mongoUri, {
useNewUrlParser: true,
useCreateIndex: true,
useUnifiedTopology: true
})
mongoose.connection.on('connected', () => {
console.log('you are connected')
})
mongoose.connection.on('error', (err) => {
console.log('connection error, please check your network settings')
})
http.listen(3000, ()=>{
console.log('Listening on 3000')
})
我需要设置我的后端来接受 https 请求吗?即使我使用 https url 访问应用程序,应用程序中的其他所有内容都可以在节点/express 端使用 http 正常工作。我对快速服务器的请求的唯一问题是 socket.io。
【问题讨论】:
标签: node.js amazon-web-services express amazon-ec2 socket.io