2017-11-30 12 views
1

Server-Side-Code:Node.js, socket.io https-Verbindung

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

}); 

Client-Seite Code:

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

}); 

Auf http auf https in derselben Seite gearbeitet hat es nicht angeschlossen. Gesucht viele Beispiele, aber alle Beispiele für Express. Ich erstelle keinen HTTP-Server in node.js muss nur zu socket.io arbeiten.

+0

Haben Sie den obigen Code geändert, wenn Sie die HTML-Seite in https geändert haben? – Loren

+0

Nein, ich ändere keinen Code. Es ist der ursprüngliche Code funktioniert auf http und funktioniert nicht auf https. – PainMustDie

Antwort

0

Wenn Sie den Client über HTTPS ausführen, versucht socket.io, eine Verbindung mit Ihrem Server über HTTPS herzustellen. Momentan akzeptiert Ihr Server nur HTTP-Verbindungen, die Funktion listen(port) unterstützt kein HTTPS.

Sie müssen einen HTTPS-Server erstellen und dann socket.io anhängen, so etwas.

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) { 

}); 

Und wenn Sie sowohl HTTP und HTTPS, dann können Sie zwei Server starten und socket.io sowohl befestigen.

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) { 

}); 

Dann auf der Client-Seite können Sie bestimmen, welcher Port für die Verbindung basierend auf, ob die Seite über HTTP oder HTTPS zugegriffen wurde.

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

}); 
+0

Ich habe 3 Dateien. server.key - (privater Serverschlüssel) // server.crt - (mein Serverzertifikat) // chsert.crt - (verkettete andere Zertifikate). Wie kann ich privkey.pem und fullchain.pem generieren. Ich versuche Dateien in .pem umzubenennen aber Fehler 'Fehler: Fehler: 0B080074: X509 Zertifikat Routinen: X509_check_private_key: Schlüsselwerte stimmen nicht überein ' – PainMustDie

+0

Wie kann ich fullchain.pem erstellen? – PainMustDie

+0

Diese Dateien sollten wie sie sind funktionieren. Setzen Sie 'key:' auf Ihre 'server.key' Datei,' cert: 'auf Ihre' server.crt' Datei, und fügen Sie eine 'ca:' Eigenschaft als ein Array hinzu, das Ihre 'chsert.crt' Datei enthält. Check out [this] (https://stackoverflow.com/a/13450299/2288513) Antwort für ein Beispiel. –

Verwandte Themen