2013-03-16 10 views
17

socket.IO kullanan bir node.js uygulamasına sahibim. Http üzerinde iyi çalışıyor, ancak https aracılığıyla sokete bağlanmaya çalışırken - hiçbir şey olmuyor. Her şey http çalışıyor söylediği gibi,Socket.IO https üzerinden iletişim kuramıyor

var secureConnection = false; 
var port = 8899; 
if (window.location.protocol === 'https:') { 
    port = 8895; 
    secureConnection = true; 
} 

var socket = io.connect('domain.org', {port: port, secure: secureConnection}); 

:

var fs = require('fs'); 

var ioHttp = require('socket.io').listen(8899, { 
    'flash policy port': -1 
}); 

initSocket(ioHttp); 

var ioHttps = require('socket.io').listen(8895, { 
    key: fs.readFileSync('/path/to/file/file.key'), 
    cert: fs.readFileSync('/path/to/file/file.crt'), 
    ca: [ 
     fs.readFileSync('/path/to/file/sub.class1.server.ca.pem'), 
     fs.readFileSync('/path/to/file/ca.pem') 
    ], 
    'flash policy port': -1 
}); 

initSocket(ioHttps); 

ve initSocket fonksiyonu::

function initSocket(io) { 
    io.enable('browser client minification'); 
    io.enable('browser client etag'); 
    io.enable('browser client gzip'); 

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

    io.sockets.on('connection', function (client) { 
     //the connnection is handled here 
    }); 
} 

istemci böyle bağlamak
İşte kod bazı parçası ama https üzerinden bağlantı kuruyor bana "Bağlantı kesildi". Neyi yanlış yapıyorum?

cevap

40

https sunucusu gibi socket.io sunucusunu başlatamazsınız. Ayrı bir https sunucusunu başlatmanız ve daha sonra buna socket.io sunucusu eklemeniz gerekir.

var https = require('https'),  
    fs = require('fs');   

var options = { 
    key: fs.readFileSync('ssl/server.key'), 
    cert: fs.readFileSync('ssl/server.crt'), 
    ca:  fs.readFileSync('ssl/ca.crt') 
}; 
var app = https.createServer(options); 
io = require('socket.io').listen(app);  //socket.io server listens to https connections 
app.listen(8895, "0.0.0.0"); 
+1

kendini imzalamak veya sertifikaları kontrol eder ve sizi uyarır tarayıcılarda normal HTTP gibi davranmaya socket.io yapar mı? – Titan

+0

Hey, server.key, server.crt ve ca.crt'yi nereden ediniyorsunuz? kendinden mi yapılmış? kendi kendine üretiliyorsa üretim üzerinde çalışacak mı? –

+1

@GreenGiant Talebi dikkate alınSert ve reddet [belge] 'deki izin verilmeyen iç seçenekleri (http://nodejs.org/api/tls.html#tls_tls_createserver_options_secureconnectionlistener) – user568109