2017-10-15 6 views
2

J'utilise le serveur socket.io 2.0.3 simple sans express ou quelque chose de similaire à exécuter une fonction de conversation simple dans mon application Laravel.Impossible de faire fonctionner socket.io sur HTTPS

Tout fonctionnait bien jusqu'à ce que je décide de changer de site web en HTTPS. Maintenant socket.io refuse de se connecter (ERR_CONNECTION_CLOSED).

Voici ma configuration la plus simple:

server.js:

var io = require('socket.io')(8080, { 
    origins : //some stuff 
}); 

fichier HTML

<script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/2.0.3/socket.io.js"></script> 

var socket = io(':8080'); 
//more stuff 

je tous les fichiers de certificats requis dans le dossier du serveur, intermediate.crt, domaine. com.crt et domain.com.key

Quelqu'un peut-il aider avec l'exemple le plus simple comment faire t son travail sur https? Merci d'avance!

Modifier: Besoin d'une solution possible sans utiliser Express.

+0

double possible de [nœud. js, socket.io avec SSL] (https://stackoverflow.com/questions/6599470/node-js-socket-io-with-ssl) Il me semble ce fil devrait avoir tout ce dont vous avez besoin. –

+0

N'y a-t-il aucun moyen de le faire sans utiliser Express? –

+0

Il ne suffit pas d'inclure simplement le code client dans le navigateur. Il doit y avoir un composant côté serveur co quelque part. –

Répondre

0

Je ne pouvais pas arriver à écrire ce dans un langage simple code socket.io, donc je fini par utiliser express après tout.

Voici le code de travail plus simple si quelqu'un dont il a besoin à l'avenir:

server.js

var express = require('express'); 
var app = module.exports = express(); 
var https = require('https'); 
var fs = require('fs'); 
var server = https.createServer({ 
    key: fs.readFileSync(/*full path to your key*/), 
    cert: fs.readFileSync(/*full path to your cert*/), 
    ca: fs.readFileSync(/*full path to your intermediate cert*/), 
    requestCert: true, 
    rejectUnauthorized: false 
},app); 
server.listen(8080); //listen on port 8080 

var io = require('socket.io').listen(server); 

io.set('origins', /*your desired origins*/); 

io.set('transports', ['websocket', 
    'flashsocket', 
    'htmlfile', 
    'xhr-polling', 
    'jsonp-polling', 
    'polling']); 

var sockets = {}; 
//your socket logic 

en HTML:

var socket = io(':8080',{secure: true}); 
0

Vous pouvez créer une instance d'un serveur HTTPS avec tous les paramètres pertinents

var https = require('https'); 
https.createServer(options, app).listen(443); 

Ensuite, il suffit de passer au constructeur:

new SocketIo(https) 
0

faits importants:

Vous devez utiliser https not http, Besoin de charger des fichiers crt et de créer des objets d'objet comme dans l'exemple côté client besoin seulement adresse correcte comme: https://YOUR_domain.com:PORT

côté serveur:

//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 
//High definition 
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 
// Globals 
//var MEMORY_CLEANER_INTERVAL = 5000; 
//var crypto = require('crypto'); 
var tls = require('tls'); 
//dl = require('delivery'); 
var fs = require("fs"); 
var mysql  = require('mysql'); 
var express = require("express"); 
var app = express(); 
var http = require('http'); 
var https = require('https'); 
//var mkdirp = require('mkdirp'); 
var path = require('path'); 
//var nodemailer = require('nodemailer'); 
//includer 
function read(f) {return fs.readFileSync(f).toString();} 
function include(f) {eval.apply(global, [read(f)]);} 

//var BASE = require('./lib/level1_module'); 
//BASE.NAME = "YEap"; 

var pkey = fs.readFileSync('/etc/httpd/ssl/YOUR_FILE.key'); 
var pcert = fs.readFileSync('/etc/httpd/ssl/YOUR_FILE_com.crt') 

var SERVER_PORT = 9000; 
var options = { 
    hostname: 'YOUR_PAGE.com', 
    port: 9000, 
    key: pkey, 
    cert: pcert, 
    requestCert: true, 
    rejectUnauthorized: false, 
}; 

var server = https.createServer(options, app).listen(SERVER_PORT, function(){ 
    console.log("Express server listening on port " + SERVER_PORT); 
}); 

var io = require('socket.io').listen(server); 
server.listen(SERVER_PORT); 
console.log('Socket server listening on port : ' , SERVER_PORT);