0

我正在尝试建立一个安全的 socket.io 连接。我已经设置了一个 localhost apache 服务器以在 443 上运行 https,但现在我无法让客户端 socket.io 在端口 9650 上打开安全连接。

服务器端代码很简单:

this.socket = require("socket.io").listen(port);

客户端很简单:

<script type="text/javascript" src="http://localhost:9650/socket.io/socket.io.js"></script>

(https在这里不起作用)

this.Socket = io.connect("https://localhost", {secure: true, port:9650});

io 已定义,因此我可以调用 connect 但尝试连接时出现此错误:

GET https://localhost:9650/socket.io/1/?t=1381630341479  socket.io.js:1659

我已经尝试了连接的变体,但找不到有效的解决方案。一切正常工作都是安全的设置为 false 但这不是我想要的。

这不是一个 http 节点应用程序。这是一个通用应用程序。似乎我喜欢的一切都喜欢 http 类型的服务器,而我在这里不需要。

4

1 回答 1

0

您收到错误消息,因为客户端在尝试与服务器握手时找不到 HTTPS 资源。要解决此问题,您将需要 Socket.IO 来侦听 HTTPS 服务器的实例。

无论您是否需要,Socket.IO 都会在内部使用 HTTP 服务器。默认情况下,它是一个 HTTP 服务器,所以如果你想通过 TLS 使用传输,你需要手动创建一个 HTTPS 服务器。

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

var options = {
  key: fs.readFileSync('key.pem'),
  cert: fs.readFileSync('cert.pem')
};

var server = https.createServer(options);
var io = require('socket.io').listen(server);

server.listen();
于 2013-10-13T02:27:47.943 回答