【问题标题】:Socket.io Handshake fails on site but not on localhostSocket.io 握手在现场失败,但在 localhost 上失败
【发布时间】:2014-11-18 11:39:36
【问题描述】:

Socket.io 握手在我的站点上失败,但在 localhost 上没有。 我必须提供自定义握手,因为 socket.io 无法找到我的查询参数。

这是我在 socket.service.js 中的声明:

var ioSocket = io('https://my-site.rhcloud.com//?EIO=2&transport=polling&t=1414328625757-0&
token=' + Auth.getToken(), {

});

以及我如何在服务器端捕获它:

socketio.use(function(socket, next) {
      request.get('https://my-site.rhcloud.com/api/users/chan', {qs:{access_token:socket.handshake.query.token}}, function(err, me) {
          if (err||!me.body|| me.body=='Unauthorized') {
              if (!me) console.log('!me');
              if (err) console.log(err);
              next(err);
          }
          else {
              // perfoming operations
              next();
          }
      });
  });

这是我收到的消息:

WebSocket connection to 'wss://my-site.rhcloud.com/socket.io/?EIO=2&transport=websocket&t=…YwMX0.1F6ebfNxzoDPYffXGapGMzLFPJd-mfN0EexqZzXXo7A&sid=z0Jmrbgb7OS0nbqxAAAG' failed: Error during WebSocket handshake: Unexpected response code: 400 

我真的迷路了,在 Google 上进行了很多研究,但没有成功。 任何帮助将不胜感激!

【问题讨论】:

    标签: socket.io


    【解决方案1】:

    经过大量搜索,我意识到问题来自 Openshift。您必须指定要使用的端口套接字。见这篇文章:https://blog.openshift.com/paas-websockets/

    所以,我只需要写:

    var ioSocket = io('http://my-site.rhcloud.com:8000, {
    
    });
    

    【讨论】:

    • 你在哪里写这个?我在 IIS 8 上运行它的 Windows 中遇到了同样的问题。有什么建议吗?谢谢。
    • 我的意思是我正在使用 NodeBB 论坛软件,所以我并没有真正在任何地方声明套接字。我想修复它而不需要过多地进入源代码。
    • @OndrejTokar 抱歉耽搁了,没有看到您的评论。我在客户端声明了这一点,在负责套接字声明的 Angular 服务中
    【解决方案2】:

    Nginx 代理通过以下配置解决了这个问题:

    location / {
    proxy_pass http://localhost:8080;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_set_header Host $host;
    }
    

    原解决方案here。它非常适合我(Ubuntu 14.4 + Plesk 12.5)。

    【讨论】:

      【解决方案3】:

      我将我的节点/express 服务器部署到 Azure,但出现以下错误

      websocket.js:100 WebSocket 连接到“ws://mywebsitename.azurewebsites.net/socket.io/?EIO=3&transport=websocket&sid=ssEHs-OWxI6mcChyAAAB”失败:WebSocket 握手期间出错:意外的响应代码: 503

      ,我通过在 Azure 控制台中启用 WebSocket 解决了我的问题,如下所示

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-09-24
        • 2021-02-25
        • 2018-07-28
        • 2017-06-19
        • 2023-03-26
        • 1970-01-01
        相关资源
        最近更新 更多