这是我可以在本地运行的代码片段:
服务器:
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,有什么我需要注意的吗?
最佳答案
目前,不支持通过 ws
或 wss
协议(protocol)连接到 App Engine 应用程序。可以获取服务于初始请求的实例的 IP,然后直接连接到该实例,但这会绕过 App Engine 的负载均衡器,这首先会破坏将应用程序部署到 App Engine 的目的。
App Engine 公共(public)问题跟踪器上目前有一个 Unresolved 问题 ( Issue 2535: Web Sockets API )。欢迎star此问题以支持它并接收更新。
关于javascript - 当 node.js 部署到 Google App Engine 时,socket.io 连接失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37962319/