我正在尝试设置安全的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
我尝试过连接上的变体,找不到可行的解决方案。一切确实有效,安全设置为假,但这不是我想要的。
这不是http节点应用程序。这是一个通用的应用程序。似乎我所喜欢的所有东西都支持http类型的服务器,我在这里不需要它。
答案 0 :(得分: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();