所以,我刚刚更新了我的网站以使用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 );
答案 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