首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Websockets不使用Google

Websockets不使用Google
EN

Stack Overflow用户
提问于 2019-09-05 02:47:26
回答 1查看 6.7K关注 0票数 10

最近,我向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。

代码语言:javascript
复制
runtime: nodejs10

instance_class: F2

handlers:
- url: /.*
  secure: always
  redirect_http_response_code: 301
  script: auto

network:
  session_affinity: true

Socket.io在服务器上以一种简单的方式使用:

代码语言:javascript
复制
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上工作?可能需要防火墙规则或其他配置更改?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-09-08 14:52:25

代码语言:javascript
复制
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功能。

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57797786

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档