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

我和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网站的客户端发送响应。