这里是我可以在本地运行的代码片段:
服务器:
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,我需要注意什么?
答案 0 :(得分:1)
此时,不支持通过ws
或wss
协议连接到App Engine应用程序。可以获得为初始请求提供服务的实例IP,然后直接连接到该实例,但这样可以绕过App Engine的负载均衡器,这样就无法实现将应用程序部署到App Engine的目的。
App Engine公共问题跟踪器目前存在未解决的问题(Issue 2535: Web Sockets API)。欢迎 明星 此问题以支持并接收更新。