1

所以我正在尝试将 NodeJS 与 Express + Socket.IO 一起使用。

我查看了大约 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 证书位置和域名。

编辑:

运行时:

[root@example exampleapp]# node app.js
   info  - socket.io started
Server a-hoy!
4

2 回答 2

2

较新版本的 haproxy 支持 ssl。Haproxy 非常稳定和高性能,我相信它能够处理 ssl 而不是其他(软件)解决方案。我花了相当多的时间试图让 haproxy + socket.io(网络和闪存套接字支持)+ ssl 工作。我写了一篇博客,这样其他人就可以避免花太多时间在上面。

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

这种配置对我们来说非常棒。

干杯,基督徒

于 2013-05-21T16:41:51.873 回答
1

老实说,让 Node 前面的东西做 SSL 要容易得多(而且速度也更快——Node 的 SSL 支持还没有得到很好的优化)。我们在 Node 前面的 HAProxy 前面使用Stud ,其他人现在只使用 HAProxy,因为它支持 SSL。

Stud 很容易设置,并且对我们来说是坚如磐石的。

于 2013-05-13T15:56:09.587 回答