没有SSL,Heroku上的Socket.IO不起作用

时间:2014-07-29 17:33:19

标签: node.js ssl heroku socket.io

我有一个聊天服务器设置:

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个发射。之后的任何发射都没有收到。

1 个答案:

答案 0 :(得分:0)

原来,Sophos杀毒软件是Mac的罪魁祸首。禁用所有网络保护后,我的聊天应用程序运行正常。 这里有趣的一点是,Sophos只针对Chrome浏览器,因为Firefox和Safari的工作没有任何问题。