node.js - 没有 SSL,Heroku 上的 Socket.IO 无法工作

标签 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 下的聊天服务器确实收到了一个 emit,但只有 1 个 emit。之后的任何发射都不会被接收到。

最佳答案

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

关于node.js - 没有 SSL,Heroku 上的 Socket.IO 无法工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25021524/

相关文章:

node.js - 延迟后从文档对象触发事件

javascript - Gmail API-gapi 未定义node.js

heroku - 在 Heroku 上测试 PostgreSQL PostGIS 的选项?

javascript - 从 nodejs 运行 tomcat

javascript - 如何从 Node.js 文档中获取表格

php - AWS Elasticbeanstalk 单实例强制 SSL

java - 如何从 JDK 禁用 TLS 1.0

java - Gatling 中的 SSL 签名证书身份验证

heroku - 在 Heroku 上与 Resque 并发(每个节点运行多个工作程序)

django - 具有共享代码库和数据库的多个 Django 站点