【问题标题】:socket.io connection fails when node.js deployed to Google App Engine将 node.js 部署到 Google App Engine 时,socket.io 连接失败
【发布时间】:2016-10-24 01:23:55
【问题描述】:

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

服务器:

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());

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

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

这是什么原因造成的,我该如何解决?另外,一旦我开始运行,我打算更改为 https,那里有什么需要注意的吗?

【问题讨论】:

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


    【解决方案1】:

    目前,不支持通过 wswss 协议连接到 App Engine 应用程序。可以获取为初始请求提供服务的实例的 IP,然后直接连接到该实例,但这绕过了 App Engine 的负载平衡器,这首先违背了将应用程序部署到 App Engine 的目的。

    App Engine 公开问题跟踪器上当前有一个未解决的问题 (Issue 2535: Web Sockets API)。随意star此问题以支持它并接收更新。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-09-20
      • 1970-01-01
      • 2018-07-24
      • 2021-07-23
      • 1970-01-01
      • 2021-09-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多