我遇到了socket.io和NodeJS的一个大问题。 我尝试通过HTTPS下的Socket.IO与NodeJS服务器进行通信,但是当服务器向客户端发送响应时,它没有做任何事情。
我已经检查过了,但这不是证书错误!密钥和证书有效。
但是,如果没有HTTPS,它可以完美运行。 这是我的代码:
var express = require('express'),
fs = require('fs');
var config = JSON.parse(fs.readFileSync(__dirname + '/config.json', 'utf8')),
options = config.options || {};
var PORT = options.port,
SSL_PORT = options.ssl_port;
var app = express(),
server = require('http').createServer(app);
io = require('socket.io').listen(server);
server.listen(PORT, function()
{
startServer(io);
});
if (options.ssl_key.length && options.ssl_cert.length)
{
var sslOpt = {
key: fs.readFileSync(options.ssl_key, 'utf8'),
cert: fs.readFileSync(options.ssl_cert, 'utf8')
};
var sslServ = require('https').createServer(sslOpt, app),
ioSsl = require('socket.io').listen(sslServ);
sslServ.listen(SSL_PORT, function()
{
startServer(ioSsl);
});
}
function startServer(io)
{
io.on('connection', function(socket)
{
socket.on('msg', function(data)
{
io.emit('clientMsg', 'New message !');
});
}.bind(this));
}

客户端部分:
var PORT = 2999,
secured = false,
serverName = 'my-website-url',
completeUrl = 'https://my-website-url.com';
if (completeUrl.substr(0, 5) == 'https')
{
PORT = 3000;
secured = true;
}
var socket = io(serverName + ':' + PORT, {
transports: ['websocket'],
secure: secured
});
socket.emit('msg', 'I send a msg');

我使用端口2999用于HTTP而3000用于HTTPS,当我通过HTTPS服务器(端口3000)发送消息时,我没有收到服务器响应,但是我在HTTP服务器上接收它(端口2999)
因此,在SSL下,服务器不会向使用我的HTTPS网站的客户发送回复。