Nodejs https socket.io

时间:2017-01-03 16:53:56

标签: node.js https socket.io

这是我的故事:

- 我有一个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可以正常工作但是对“混合内容”有所警惕,这是由浏览器阻止的。) 非常感谢你的帮助!

1 个答案:

答案 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中明确包含端口。