Websocket 客户端获取 200 响应代码

标签 websocket amazon-elastic-beanstalk

我有一个 nodejs 服务器在同一端口上同时提供 http 和 websocket。该设置在本地主机上运行良好,但是当部署在 Amazon Beanstalk(具有负载均衡器和 nginx)上时,ws 客户端在建立 ws 连接时抛出错误:“意外响应代码 200”。我对此不是 100% 确定,但我认为这是因为 nodejs 服务器以某种方式将 ws 握手请求误认为是 http 请求,因此返回 200。这是我的服务器的代码:

var WebSocketServer = require('websocket').server;
var http = require('http');
var fs = require('fs');

var indexPage = "Loading index page, try again later?";

fs.readFile('./index.html',function (err,data){
    indexPage = data;
})
var server = http.createServer(function(request, response) {
});
server.listen(1337, function() { });

// create the server
wsServer = new WebSocketServer({
    httpServer: server
});

// WebSocket server
wsServer.on('request', function(request) {
    console.dir(request);
    var connection = request.accept(null, request.origin);
    console.log("connected");
    connection.on('message', function(message) {
        if (message.type === 'utf8') {
            console.log("Received",message.utf8Data);
        }
    });
    connection.on('close', function(connection) {
    });
});

对我有什么建议吗?在这种情况下,我应该如何配置 nginx 和负载均衡器?

最佳答案

通常在 node.js 托管服务上,它们提供一个环境变量,该变量在每次启动您的应用程序时动态创建 - 这是典型的:

var port = process.env.PORT || 1337;

然后在没有环境变量的情况下在本地启动时,它只使用您最喜欢的 1337

关于Websocket 客户端获取 200 响应代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26734672/

相关文章:

javascript - 带 ActionCable 的回形针

python - 使用 Python 和 websocket-client 库发送安全 (SSL) 网络套接字请求,并希望更好地了解发生了什么

Javascript 将字符串发送到 python 脚本

javascript - TypeError : AWS. DynamoDB.DocumentClient 不是构造函数

amazon-web-services - .ebextensions 删除 preinit 脚本

Javascript:通过 node.js 二进制 websockets 发送整数数组

nginx - 使用 nginx 作为 websocket 连接的代理

python - Elastic Beanstalk 中的导入错误 : No module named django. core.wsgi

Spring Boot 不适用于 Elastic Beanstalk

ruby-on-rails - 如何在 AWS Elastic Beanstalk 上使用 Resque 运行 Rails 后台作业?