我有一个聊天服务器设置:
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个发射。之后的任何发射都没有收到。
答案 0 :(得分:0)
原来,Sophos杀毒软件是Mac的罪魁祸首。禁用所有网络保护后,我的聊天应用程序运行正常。 这里有趣的一点是,Sophos只针对Chrome浏览器,因为Firefox和Safari的工作没有任何问题。