问题描述
我按照指南在我的测试/学习 Angular MEAN 堆栈应用程序中实现了网络套接字。在本地运行应用程序时,Web 套接字实现运行良好,但是一旦我将其上传到 AWS Elastic Beanstalk,导航到环境/应用程序的 URL 时就会收到“502 Bas Gateway”错误。
我正在使用节点包“socket.io”(用于后端)和“ngx-socket-io”(用于前端),然后在后端(server.js 文件)中添加了这样的套接字:
const http = require('http');
const debug = require('debug')('node-angular');
const app = require('./app');
var socketIO = require('socket.io');
var os = require("os");
//To ensure the provided port is a valid number
const normalizePort = val => {
var port = parseInt(val,10);
if (isNaN(port)) {
//named pipe
return val;
}
if (port >= 0) {
return port;
}
return false;
};
//To handle errors of different types and exit the server-listening process if one is detected.
const onError = error => {
if (error.syscall !== "listen") {
throw error;
}
const bind = typeof addr === "string" ? "pipe " + addr : "port " + port;
switch (error.code) {
case EACCES:
console.log(bind + " requires elevated privilages");
process.exit(1);
break;
case EADDRINUSE:
console.log(bind + " is already in use");
process.exit(1);
break;
default:
throw error;
}
};
//console logs that we are Now listening to incoming requests
const onListening = () => {
const addr = server.address();
const bind = typeof addr === "string" ? "pipe " + addr : "port " + port;
debug("Listening on " + bind);
};
const port = normalizePort(process.env.PORT || "3000");
app.set(port);
const server = http.createServer(app);
/////////////////////////////////////////////////////////////////////////////////
//for web sockets
var socketIOServer = socketIO.listen(server);
socketIOServer.sockets.on('connection',(socket) => {
console.log('Socket connected');
socket.on('createPost',(post) => {
socketIOServer.emit('createPost',post);
console.log('Create Post socket emitted');
});
socket.on('updatePost',(post) => {
socketIOServer.emit('updatePost',post);
console.log('Update Post socket emitted');
});
socket.on('deletePost',(post) => {
socketIOServer.emit('deletePost',post);
console.log('Delete Post socket emitted');
});
});
/////////////////////////////////////////////////////////////////////////////////
server.on("error",onError);
server.on("listening",onListening);
server.listen(port,()=>{
console.log("Server started at: "+os.hostname()+":"+port);
});
当然还有更多与前端相关的代码,但我很确定它不相关,因为我已经将问题隔离到“for web sockets”注释下包含的代码。
我猜这与端口转发有关,如果是这样,我不知道如何在 AWS 上更改它们,或者这样做是否可行。
我使用 AWS Elastic Beanstalk 免费套餐只是为了学习,除了基本的了解之外,我对 AWS 或服务器的工作原理知之甚少。我真的只希望我的工作应用程序(本地)可以部署并在实际网络上以相同的方式工作。非常感谢任何帮助/建议。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)