2013-05-13 84 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