所以我切换到了HTTPS,一切都很好地解决了套接字。
如果我尝试使用HTTP访问网站,则套接字会连接,但如果我尝试使用HTTPS连接,我会得到:
控制台错误:
Failed to load resource: net::ERR_CONNECTION_CLOSED
Failed to load resource: net::ERR_CONNECTION_CLOSED
Failed to load resource: net::ERR_CONNECTION_CLOSED
Failed to load resource: net::ERR_CONNECTION_CLOSED
前端:
function connect()
{
if (!SOCKET)
{
var hash = getCookie('hash');
if (hash == "") {
//$.notify('You must login!', 'success');
}
if (hash != "") {
$.notify('Connecting...', 'success');
}
SOCKET = io(':3001');
SOCKET.on('connect', function(msg) {
if (hash != "") {
//$.notify('Connected!', 'success');
}
SOCKET.emit('hash', {
hash: hash
});
$('#games tr').remove();
});
SOCKET.on('connect_error', function(msg) {
$.notify('Connection lost!', 'success');
});
SOCKET.on('message', function(msg) {
onMessage(msg);
});
SOCKET.on('disconnect', function(m) {
SOCKET.emit('disconnect', {
uhash: hash
});
});
}
else
{
console.log("Error: connection already exists.");
}
}
的Node.js /后端
var httpsOptions = {
cert: fs.readFileSync("/path/to/cert/cert.pem"),
ca: fs.readFileSync("/path/to/cert/chain.pem"),
key: fs.readFileSync("/path/to/cert/privkey.pem"),
}
var server = require('https').createServer(httpsOptions);
var io = require('socket.io').listen(server);
server.listen(3001);
答案 0 :(得分:0)
您的Node应用程序应该只接受HTTP连接。您的Apache服务器应该负责HTTPS。这简化了您的应用程序,并允许Apache为您负载均衡,如果您决定这样做。
因此,您的应用程序和Apache之间应该是HTTP,然后是Apache和客户端之间的HTTPS。关于如何执行此操作有很多指南,我建议您阅读official documentation
如果您决定反对这一点,并在网络应用级别实施SSL(不推荐),那么我们需要更多信息。