【问题标题】:Node, socket.io with SSL节点,带有 SSL 的 socket.io
【发布时间】:2017-07-23 12:29:48
【问题描述】:

我对 node.js、socket.io 和我实施的新 SSL 证书有疑问。已经在stackoverflow上尝试了很多解决方案,但我无法让它工作。很想为我的情况提供一些定制的帮助,并希望能帮助其他人。

没有 SSL 的情况是这样的:

在我的 node.js 脚本上

var app = require('http').createServer();
var io = require('socket.io')(app);

app.listen(8080);

在我的 html 页面中

var socket = io('http://mywebsite.com:8080');

这工作正常,但是当我将 SSL 证书混入其中时,它会出错。我尝试了以下一些解决方案:

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

var options = {
    key:    fs.readFileSync('/server.key'),
    cert:   fs.readFileSync('/server.crt')
};
var app = https.createServer(options);

var io = require('socket.io').listen(app);

app.listen(8080);

var io = io('https://mywebsite.com', { secure: true });

欢迎提出任何建议!

【问题讨论】:

  • 试试这个解决方案stackoverflow.com/a/31165649/2036977
  • 尝试了 Wilson 和 emonik 的解决方案。两者都没有给我联系:(
  • 尝试侦听端口 443。同时在连接中使用完整 URL,因为您的证书适用于您的完整域。您可能需要使用 sudo 来测试连接。我建议您使用像 nginx 这样的反向代理来处理您的安全连接,并在 nginx 上将其重新路由到端口 8080 上的应用程序。
  • @Riddell 你能解决这个问题吗?

标签: javascript node.js ssl socket.io


【解决方案1】:

您的代码var io = require('socket.io').listen(app); 不正确。它应该是var io = require('socket.io')(app);,因为来自socket io 的require 会返回一个函数(并且您需要将服务器传递给它)。

【讨论】:

  • 更改为:var io = require('socket.io')(app);现在的 html: var socket = io('website:8080');仍然没有连接:(
猜你喜欢
  • 1970-01-01
  • 2011-09-29
  • 2012-08-18
  • 1970-01-01
  • 2016-06-06
  • 2017-07-27
  • 1970-01-01
  • 2017-11-12
  • 2015-04-01
相关资源
最近更新 更多