最新消息: 电脑我帮您提供丰富的电脑知识,编程学习,软件下载,win7系统下载。

Socket.ioHapi无法正常运行Azure App Service(Linux)

IT培训 admin 0浏览 0评论

Socket.io/Hapi无法正常运行Azure App Service(Linux)

我最近在测试环境中从Azure App Services Windows切换到Linux。除了我们的套接字连接,其他所有东西都像以前一样工作。关于Linux App Service似乎有很多过时的信息,而且文档也很乏味。但是,根据these release notes,可以在Azure App Service Linux上为Web套接字提供支持。

在Azure App Service for Linux documentation中,它指出必须禁用perMessageDeflate才能使Web套接字与Linux App Service和NodeJS一起使用。我相信我已经在下面的HapiJS服务器代码中做到了。我已经用console.log(io)验证了设置perMessageDeflate似乎正确设置为false。

import Server from 'socket.io';
import socketioJwt from 'socketio-jwt';

const myHapiJSPlugin = {
  name: 'myPluginName',
  version: '2.0.0',
  register: function (server, options) {

    const io = new Server(server.listener, {
      perMessageDeflate: false,
      transports: ['websocket'],
      origins: '*:*'
    });

    io.use(socketioJwt.authorize({
      secret: JWT_SECRET_KEY,
      handshake: true
    }));

    io.on('connection', socket => {
      console.log(io);
      // more code here
    };
  };
};

[当我使用网络客户端打开Chrome控制台的网络页面时,我从服务器收到101响应码。我console.log连接/断开socket.io客户端的回调。尽管收到服务器的确认(101响应),但我可以看到它不断地连接/断开连接。连接状态在控制台中显示为“已停止”。随着回调的触发,我似乎正在订阅一条特定的路由。

尽管从下面的配置中添加了perMessageDeflateorigins用于测试socket.io docs,但从Azure应用服务Windows切换以来,我没有进行任何其他代码更改。我认为在握手或身份验证期间出现了问题。

Status Code: 101 Switching Protocols
Access-Control-Allow-Origin: *
Connection: Upgrade
Date: Tue, 01 Oct 2019 18:04:57 GMT
Sec-WebSocket-Accept: <HASH>
Server: Kestrel
Upgrade: websocket

我还向客户端代码添加了perMessageDeflate。没关系。

const client = new io(URL, {
  query: 'token=' + jwt,
  perMessageDeflate: false,
  transports: ['websocket'],
  upgrade: false
});

我还想念什么?如何在Azure App Service Linux上启用Web套接字?我检查了Windows的配置设置。似乎没有设置-因为似乎默认情况下启用了Web套接字。我已经在日志中验证了Web服务器不会持续重启导致连接/断开。

回答如下:

如果关闭身份验证,您的WebSockets是否可以工作?

启用身份验证功能后,我仅会遇到使用Linux Apps的WebSockets问题。

我相信这是由于EasyAuth代理的实施不佳,并且认为MS很难解决。

Socket.io/Hapi无法正常运行Azure App Service(Linux)

我最近在测试环境中从Azure App Services Windows切换到Linux。除了我们的套接字连接,其他所有东西都像以前一样工作。关于Linux App Service似乎有很多过时的信息,而且文档也很乏味。但是,根据these release notes,可以在Azure App Service Linux上为Web套接字提供支持。

在Azure App Service for Linux documentation中,它指出必须禁用perMessageDeflate才能使Web套接字与Linux App Service和NodeJS一起使用。我相信我已经在下面的HapiJS服务器代码中做到了。我已经用console.log(io)验证了设置perMessageDeflate似乎正确设置为false。

import Server from 'socket.io';
import socketioJwt from 'socketio-jwt';

const myHapiJSPlugin = {
  name: 'myPluginName',
  version: '2.0.0',
  register: function (server, options) {

    const io = new Server(server.listener, {
      perMessageDeflate: false,
      transports: ['websocket'],
      origins: '*:*'
    });

    io.use(socketioJwt.authorize({
      secret: JWT_SECRET_KEY,
      handshake: true
    }));

    io.on('connection', socket => {
      console.log(io);
      // more code here
    };
  };
};

[当我使用网络客户端打开Chrome控制台的网络页面时,我从服务器收到101响应码。我console.log连接/断开socket.io客户端的回调。尽管收到服务器的确认(101响应),但我可以看到它不断地连接/断开连接。连接状态在控制台中显示为“已停止”。随着回调的触发,我似乎正在订阅一条特定的路由。

尽管从下面的配置中添加了perMessageDeflateorigins用于测试socket.io docs,但从Azure应用服务Windows切换以来,我没有进行任何其他代码更改。我认为在握手或身份验证期间出现了问题。

Status Code: 101 Switching Protocols
Access-Control-Allow-Origin: *
Connection: Upgrade
Date: Tue, 01 Oct 2019 18:04:57 GMT
Sec-WebSocket-Accept: <HASH>
Server: Kestrel
Upgrade: websocket

我还向客户端代码添加了perMessageDeflate。没关系。

const client = new io(URL, {
  query: 'token=' + jwt,
  perMessageDeflate: false,
  transports: ['websocket'],
  upgrade: false
});

我还想念什么?如何在Azure App Service Linux上启用Web套接字?我检查了Windows的配置设置。似乎没有设置-因为似乎默认情况下启用了Web套接字。我已经在日志中验证了Web服务器不会持续重启导致连接/断开。

回答如下:

如果关闭身份验证,您的WebSockets是否可以工作?

启用身份验证功能后,我仅会遇到使用Linux Apps的WebSockets问题。

我相信这是由于EasyAuth代理的实施不佳,并且认为MS很难解决。

发布评论

评论列表 (0)

  1. 暂无评论