Socket.io在HTTP上工作正常,但无法通过HTTPS

时间:2018-04-20 19:27:32

标签: javascript node.js websocket socket.io

所以,我刚刚更新了我的网站以使用HTTPS,当我这样做时,我的所有套接字都破了。

我更新了 socket = io.connect('http://x.x.x.x:8081');

要 socket = io.connect('https://x.x.x.x:8081',{secure:true});

但是没有这样做。

我正在使用apache,SSL证书是LetsEncrypt,所以不能自签名。

看起来似乎socket.io仍在尝试通过HTTP进行连接,同时强制使用HTTPS。

我知道这不是很多信息。如果我能添加更多可以使问题更清晰的日志,请告诉我。

我的NodeServer.js:

var socket = require( 'socket.io' );
var express = require( 'express' );
var http = require( 'http' );

var app = express();
var server = http.createServer( app );

var io = socket.listen( server);
io.set('transports',['xhr-polling']);
io.sockets.on( 'connection', function( client ) {
        console.log( "New client !" );

        client.on( 'message', function( data ) {
                console.log( 'Message received ' + data.name + ":" + data.message );
                //client.broadcast.emit( 'message', { name: data.name, message: data.message } );
                io.sockets.emit( 'message', data);
        });

        client.on( 'doTrade', function( data ) {
                //console.log( 'Message received ' + data.name + ":" + data.message );
                io.sockets.emit( 'doTrade', data );
        });
});

server.listen( 8081 );

1 个答案:

答案 0 :(得分:0)

以前,您的服务器在http上运行,现在您希望使用https连接到您的服务器。

您将创建一个https服务器。

这就是你这样做的方式

var express = require('express'),
app = express(),
https = require('https');
var privateKey  = fs.readFileSync('pathToYourKeyFile/[KeyFile.key]', 'utf8');
var certificate = fs.readFileSync('PathToCertFile/[Crt.crt]', 'utf8');
var credentials = {key: privateKey, cert: certificate};
var httpsServer = https.createServer(credentials, app);
httpsServer.listen(8081);

现在,您应该能够使用socket

成功连接此服务器