最近,我向Google部署了一个node.js服务器应用程序,该应用程序通过socket.io与客户端应用程序进行通信。因此,对于这篇文章,App现在支持websockets。
但是,客户端应用程序无法通过wss协议连接到服务器。我可以在浏览器控制台中看到以下错误消息。(我删除了服务器域)
到'wss://my server/socket.io/?EIO=3&transport=websocket&sid=dbB2UgsCYhD7c1ucAAAA‘的WebSocket连接失败:在WebSocket握手期间出错:意外响应代码: 400
然后,Socket.io返回到https长轮询,它运行良好。
下面是部署到app引擎的app.yaml,对于长轮询,session_affinity设置为true。
runtime: nodejs10
instance_class: F2
handlers:
- url: /.*
secure: always
redirect_http_response_code: 301
script: auto
network:
session_affinity: trueSocket.io在服务器上以一种简单的方式使用:
this.server = this.app.listen(this.PORT, (err: any) => {
io = socketio().listen(this.server);
io.on("connection", (socket) => {
console.log('A socket connection was made!');
});
});我想知道如何使websocket连接在App上工作?可能需要防火墙规则或其他配置更改?
发布于 2019-09-08 14:52:25
var express = require('express');
var app = express();
var expressWs = require('express-ws')(app);
const forceSecure = (req, res, next) => {
if (req.secure)
return next(); // https -- Continue
res.redirect('https://' + req.hostname + req.url)
}
/**
* This will force
* ALL HTTP requests ( GET, POST, OPTIONS, etc. )
* on ALL route handlers to be
* redirected to https
*/
app.all('*', forceSecure);
app.get('/', (req, res, next) => {
console.log('example');
res.end();
});
app.ws('/', (ws, req) => {
ws.on('message', msg => {
console.log(msg);
});
console.log('socket', req.example);
});
app.listen(3000);到目前为止,WebSockets是仅在应用程序引擎的灵活环境中支持。据我所见,您正在标准环境中部署应用程序,正如您指定的班级:instance_class: F2所表示的那样。因此,我建议将环境从标准改为灵活,请参阅这里中的app.yaml配置文件。这样做将允许您利用advantage中最近实现的WebSockets功能。
https://stackoverflow.com/questions/57797786
复制相似问题