2013-03-16 2 views
17

से कनेक्ट नहीं हो सकता है मेरे पास node.js ऐप है, जो सॉकेट.आईओ का उपयोग करता है। यह http पर ठीक काम करता है, लेकिन जब https के माध्यम से सॉकेट से कनेक्ट करने का प्रयास करता है - कुछ भी नहीं होता है। , जैसा कि मैंने कहा सब कुछ http पर ठीक काम करता हैसॉकेट.आईओ https

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

और initSocket समारोह:

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 
    }); 
} 

ग्राहक इस तरह कनेक्ट
यहाँ कोड का कुछ हिस्सा है लेकिन https पर कनेक्ट करने से मुझे "कनेक्शन बाधित हो गया" देता है। मैं क्या गलत कर रहा हूं?

उत्तर

40

आप socket.io सर्वर https सर्वर जैसे इनलाइन नहीं कर सकते हैं। आपको एक अलग https सर्वर शुरू करना होगा और उसके बाद socket.io सर्वर संलग्न करना होगा।

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

क्या आप स्वयं साइन साइन कर सकते हैं या socket.io ब्राउज़र में सामान्य HTTP की तरह व्यवहार करते हैं जहां यह प्रमाणपत्र जांचता है और आपको चेतावनी देता है? – Titan

+0

अरे, आपको server.key, server.crt और ca.crt कहां मिलते हैं? क्या यह स्वयं बनाया गया है? अगर यह स्वयं बनाया गया तो क्या यह उत्पादन पर काम करेगा? –

+1

@GreenGiant अनुरोध के लिए देखो देखें और अस्वीकार करें [दस्तावेज़ीकरण] में विकल्प के अंदर अनधिकृत (http://nodejs.org/api/tls.html#tls_tls_createserver_options_secureconnectionlistener) – user568109