这是我的故事:
- 我有一个SSL网站:https://domain.com
- 我想进行实时聊天,所以我使用node.js来使用linux服务器
- 对于linux服务器,我做了一个自签名证书
这是我的服务器代码(不是所有的,只是基础知识):
var options = {
key: fs.readFileSync("key.pem"),
cert: fs.readFileSync("cert.pem"),
requestCert: true
};
var app = express(options);
var server = https.createServer(app);
var io = socket.listen(server).listen(80);
io.on('connection', function (socket) {
socket.emit('connectedToServer', { conncted: true });
});
这是我的客户代码:
var socket = io.connect('https://XXX.XXX.XXX.XX', {secure: true, port:80});
socket.on('connectedToServer', function (data) {
socket.emit('firstTimeConnected', id);
});
OK!我在客户端有错误:net :: ERR_CONNECTION_REFUSED (如果我使用http运行客户端, - WS可以正常工作但是对“混合内容”有所警惕,这是由浏览器阻止的。) 非常感谢你的帮助!
答案 0 :(得分:0)
你的代码看起来很奇怪。我不确定它是否符合你的想法。 此外,我不确定您为什么要在端口80上侦听而不是默认443.您是否要始终使用https://www.examle.com:80/之类的网址?
尝试这样的事情:
var options = {
key: fs.readFileSync("key.pem"),
cert: fs.readFileSync("cert.pem"),
requestCert: true
};
var app = require('express')();
var server = require('https').Server(options, app);
var io = require('socket.io')(server);
现在在listen
上致电server
:
server.listen(...);
并使用默认端口(HTTP为80,HTTPS为443),除非您希望在每个URL中明确包含端口。