Socket.IO无法通过https连接

我有一个node.js应用程序,它使用socket.IO。 它在http上工作正常,但是当试图通过https连接到套接字 – 没有任何反应。
这是代码的一部分:

var fs = require('fs'); var ioHttp = require('socket.io').listen(8899, { 'flash policy port': -1 }); initSocket(ioHttp); var ioHttps = require('socket.io').listen(8895, { key: fs.readFileSync('/path/to/file/file.key'), cert: fs.readFileSync('/path/to/file/file.crt'), ca: [ fs.readFileSync('/path/to/file/sub.class1.server.ca.pem'), fs.readFileSync('/path/to/file/ca.pem') ], 'flash policy port': -1 }); initSocket(ioHttps); 

initSocket函数:

 function initSocket(io) { io.enable('browser client minification'); io.enable('browser client etag'); io.enable('browser client gzip'); io.set('transports', [ 'websocket', 'htmlfile', 'flashsocket', 'jsonp-polling' ]); io.sockets.on('connection', function (client) { //the connnection is handled here }); } 

客户端连接如下:

 var secureConnection = false; var port = 8899; if (window.location.protocol === 'https:') { port = 8895; secureConnection = true; } var socket = io.connect('domain.org', {port: port, secure: secureConnection}); 

正如我所说的一切工作正常http,但连接在https给我“连接被中断”。 我究竟做错了什么?

你不能像https服务器那样初始化socket.io服务器。 您必须启动一个单独的https服务器,然后将socket.io服务器附加到它。

 var https = require('https'), fs = require('fs'); var options = { key: fs.readFileSync('ssl/server.key'), cert: fs.readFileSync('ssl/server.crt'), ca: fs.readFileSync('ssl/ca.crt') }; var app = https.createServer(options); io = require('socket.io').listen(app); //socket.io server listens to https connections app.listen(8895, "0.0.0.0");