Socket.IO无法通过https连接

我有一个使用socket.IO的node.js应用程序。它可以在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上连接会给我“连接被中断”。我究竟做错了什么?

回答:

您不能socket.iohttps服务器那样初始化服务器。您必须启动一个单独的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");

以上是 Socket.IO无法通过https连接 的全部内容, 来源链接: utcz.com/qa/431986.html

回到顶部