Socket.IO - 服务器不会在SSL下向客户端发送响应

时间:2017-01-04 17:07:40

标签: node.js ssl https socket.io server

我遇到了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网站的客户发送回复。

0 个答案:

没有答案