AWS Elastic Beanstalk 上的 Web 套接字不适用于我的 angular 应用程序,但在通过 localhost 提供应用程序时是否有效?

问题描述

我按照指南在我的测试/学习 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 (将#修改为@)