我有一个nodejs服务器在同一个端口上同时提供http和websocket。该设置在localhost上运行正常,但是当部署在Amazon Beanstalk(具有loadbalancer和nginx)上时,ws客户端在建立ws连接时抛出错误:“意外的响应代码200”。我不是100%肯定这个,但我认为这是因为nodejs服务器以某种方式错误地将握手请求作为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和loadbalancer?
答案 0 :(得分:0)
通常在node.js托管服务上提供环境变量,该变量在每次启动应用时动态创建 - 这是典型的:
var port = process.env.PORT || 1337;
然后在没有env var的情况下在本地启动它只使用你最喜欢的1337