2013-05-13 85 views
1

所以我想用Express + Socket.IO來使用NodeJS。NodeJS + Express + Socket.IO + SSL

我已經看了約5其他堆棧溢出的問題,看着文檔移交給點我的眼睛覺得他們要流血!

我已經得到了由以下工作:

var fs   = require('fs'), 
    privateKey = fs.readFileSync('/path/to/private.key').toString(), 
    certificate = fs.readFileSync('/path/to/certificate.crt').toString(); 

var options = { 
        key: privateKey, 
        cert: certificate 
       }; 

var express = require('express'), 
    app  = express(express.logger()), 
    https = require('https'), 
    server = https.createServer(options, app), 
    io  = require('socket.io').listen(server), 
    routes = require('./routes'); 

app.configure(function() { 
    app.set('views', __dirname + '/views'); 
    app.set('view engine', 'ejs'); 
    app.use(express.bodyParser()); 
    app.use(express.methodOverride()); 
    app.use(app.router); 
    app.use(express.static(__dirname + '/public')); 
}); 


server.listen(5050, function() { 
    console.log("Server a-hoy!"); 
}); 

app.get('/', routes.index); 

io.sockets.on('connection', function (socket) { 
    socket.on('givemeresults', function (data) { 
    io.sockets.emit('results', { some: 'data' }); 
    }); 
}); 

除事實,當我運行此:

curl https://test.something.net:5050 

我得到以下(不想要的)結果

curl: (35) Unknown SSL protocol error in connection to test.something.net:5050 

這樣做的整點,所以我們可以在我們的現實網頁提供了信息的背景使用Socket.io離開回到用戶。

它的工作原理,當我使用普通的HTTP。證書也是正確的。

你能看到任何可能的原因這個失敗?

我不得不刪除現有的SSL證書的位置,和域名,出於安全原因。

編輯:

當運行:

[[email protected] exampleapp]# node app.js 
    info - socket.io started 
Server a-hoy! 

回答

1

老實說,這是更容易有東西在節點的前面做SSL(和更快的太多 - 節點的SSL支持還沒有被優化得很好然而)。我們在Node前使用HAProxy前面的Stud,其他人現在只使用HAProxy,它具有SSL支持。

梭哈非常易於安裝,並一直堅如磐石我們。

2

較新版本的haproxy支持ssl。 Haproxy非常穩定和高性能,我相信它可以處理其他(軟件)解決方案的SSL。我花了一段時間試圖讓haproxy + socket.io(web和flash socket支持)+ ssl工作。我在博客上做了博客,​​以便其他人可以避免花費太多時間。

http://blog.carbonfive.com/2013/05/02/using-haproxy-with-socket-io-and-ssl/

這種配置已經爲我們工作相當真棒。

乾杯, 基督教

+0

希望我遇到過這個!我正在使用Nginx,它正在工作(我認爲)。下一個問題對我來說是如何使用羣集和socket.io(嗚嗚嗚嗚嗚!) – 2013-06-10 10:51:17