【发布时间】: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