Node.js,socket.io https连接

时间:2017-11-30 13:04:40

标签: node.js ssl https socket.io

服务器端代码:

var io = require('socket.io').listen(8150);
io.sockets.on('connection', function (socket){

});

客户端代码:

var socketIO = io('*.*.*.*:8150');
socketIO.once('connect', function(){

});

在http上,它在同一页面上的https上工作,但未连接。 搜索了很多例子,但是所有的例子都是表达的。我不在node.js中创建任何http服务器只需要socket.io工作。

2 个答案:

答案 0 :(得分:2)

通过HTTPS运行客户端时,socket.io也尝试通过HTTPS连接到您的服务器。目前,您的服务器仅接受HTTP连接,listen(port)功能不支持HTTPS。

您需要创建一个HTTPS服务器,然后将socket.io附加到它上面,就像这样。

var fs = require('fs');

var options = {
  key: fs.readFileSync('certs/privkey.pem'),
  cert: fs.readFileSync('certs/fullchain.pem')
};

var app = require('https').createServer(options);
var io = require('socket.io').listen(app);
app.listen(8150);

io.sockets.on('connection', function (socket) {

});

如果你需要HTTP和HTTPS,你可以启动两个服务器并将socket.io连接到两个服务器。

var fs = require('fs');

var options = {
  key: fs.readFileSync('certs/privkey.pem'),
  cert: fs.readFileSync('certs/fullchain.pem')
};

var httpServer = require('http').createServer();
var httpsServer = require('https').createServer(options);
var ioServer = require('socket.io');

var io = new ioServer();
io.attach(httpServer);
io.attach(httpsServer);
httpServer.listen(8150);
httpsServer.listen(8151);

io.sockets.on('connection', function (socket) {

});

然后在客户端,您可以根据是通过HTTP还是HTTPS访问页面来确定要连接的端口。

var port = location.protocol === 'https:' ? 8151 : 8150;
var socketIO = io('*.*.*.*:' + port);
socketIO.once('connect', function() {

});

答案 1 :(得分:0)

将letencrypt与Plesk一起使用以获取有效的SSL证书。

options = {
    key: fs.readFileSync('/usr/local/psa/var/modules/letsencrypt/etc/live/mydomain.com/privkey.pem'),
    cert: fs.readFileSync('/usr/local/psa/var/modules/letsencrypt/etc/live/mydomain.com/cert.pem'),
    ca: fs.readFileSync('/usr/local/psa/var/modules/letsencrypt/etc/live/mydomain.com/chain.pem'),
    rejectUnauthorized: false,
    requestCert: true,
    agent: false
 }