【问题标题】:Socket.IO on Heroku does NOT work without SSLHeroku 上的 Socket.IO 不能在没有 SSL 的情况下工作
【发布时间】:2014-09-21 04:36:20
【问题描述】:

我有这样的聊天服务器设置:

var port = Number(process.env.PORT || 5000);

var app = require('http').createServer(handler)
  , io = require('socket.io').listen(app, {'log level':1, 'match origin protocol':true})
  , fs = require('fs')


io.set('authorization', function (handshakeData, callback) {
  console.log(handshakeData);
  callback(null, true);
});

然后我处理一些事件:

io.sockets.on('connection', function(socket) {

  socket.emit('handshaken', {id:socket.id}); // for HTML clients

  socket.on('subscribe', function(roomId) {
    doSubscribe(socket, roomId);
  });

  socket.on('unsubscribe', function(roomId) {
    doUnsubscribe(socket, roomId);
  });

  socket.on('chat', function(data) {
    doChat(data);
  });
});

客户端在不同的域中。

当我通过 https 使用聊天服务器时,一切正常。接收所有事件。但是,当我使用 http 时,我可以看到客户端可以接收到“握手”事件,但没有发送或接收其他任何内容。 我想知道这是否与 socket.io 授权在非 ssl 连接下无法正常工作有关。

但是,在本地环境中,我仍然可以使用非 ssl http://localhost:5000 作为聊天服务器 url,没有任何问题。这也可能是 Heroku 的问题吗?

更新1:经过一番调查,如果我使用http url作为聊天服务器,服务器可以向客户端发送。客户端可以连接到服务器,但不能向服务器发射任何东西(服务器没有收到任何发射)。

更新 2: 一些进一步的调查显示,在 http 下的聊天服务器确实收到了一个发射,但只有 1 个发射。之后的任何发射都不会被接收到。

【问题讨论】:

    标签: node.js ssl heroku socket.io


    【解决方案1】:

    事实证明,Mac 版 Sophos 防病毒软件是罪魁祸首。禁用所有网络保护后,我的聊天应用程序运行良好。 这里有趣的一点是,Sophos 只针对 Chrome 浏览器,因为 Firefox 和 Safari 可以正常工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-01-10
      • 1970-01-01
      • 2016-04-08
      • 1970-01-01
      • 1970-01-01
      • 2017-11-12
      • 2021-06-01
      • 2012-06-05
      相关资源
      最近更新 更多