当node.js部署到Google App Engine时,socket.io连接失败

时间:2016-06-22 08:16:58

标签: javascript node.js google-app-engine socket.io

这里是我可以在本地运行的代码片段:

服务器:

var app = require('express')();

app.use(function (req, res, next) {
    res.setHeader('Access-Control-Allow-Origin', 'http://localhost:*');
    res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE');
    res.setHeader('Access-Control-Allow-Headers', 'X-Requested-With,content-type');
    res.setHeader('Access-Control-Allow-Credentials', true);

    next();
});


app.get('/', function (req, res) {
    console.log("Got '/'");
    res.status(200).send('Hello, world!');
});

var server = app.listen(process.env.PORT || '80', function () {
    console.log('App listening on port %s', server.address().port);
});

var io = require('socket.io')(server);

io.on('connection', function (socket) {
    console.log("connection");
});

客户端:( TypeScript,从另一个端口上的单独应用运行,http://localhost:8080

this.socket = io("http://localhost");       
this.socket.on("connect", () => this.onSocketConnect());

当服务器部署在Google App Engine上,并且客户端在本地运行且地址更改为http://my-app-id.appspot.com时,我收到以下错误:

WebSocket连接到' ws://my-app-id.appspot.com/socket.io/?EIO = 3& transport = websocket& sid = -Qr3YEeyZLk9K3zmAAAC'失败:WebSocket握手期间出错:意外的响应代码:400

造成这种情况的原因以及如何解决?此外,一旦我开始运行,我计划更改为https,我需要注意什么?

1 个答案:

答案 0 :(得分:1)

此时,不支持通过wswss协议连接到App Engine应用程序。可以获得为初始请求提供服务的实例IP,然后直接连接到该实例,但这样可以绕过App Engine的负载均衡器,这样就无法实现将应用程序部署到App Engine的目的。

App Engine公共问题跟踪器目前存在未解决的问题(Issue 2535: Web Sockets API)。欢迎 明星 此问题以支持并接收更新。