我正在尝试设置安全的 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 类型的服务器,但我在这里不需要它。
您收到错误,因为客户端在尝试与服务器握手时找不到 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();