很抱歉,如果我错过了一些信息,这是我在stackoverflow上的第一篇文章。
我的网站上有定期的http请求,但今天我已经将SSL加密添加到我的网站,因为我已经听说过它会吸引更多流量到我的网站,但是我已经在我的网站上添加了SSL我从socket.io收到错误:" ERR_CONNECTION_CLOSED"。
编辑:另一个重要的注意事项是,当我用http而不是htttps键入url时,套接字连接到端口。
这是服务器端用于连接端口的内容: var io = require(' socket.io')(4002);
这是客户端用于连接端口的内容:
var HOST =":4002&#34 ;; SOCKET = io(HOST);
提前感谢您的帮助。
答案 0 :(得分:0)
尝试使用secure set为true的连接。
var socket = io.connect('https://localhost', {secure: true});<br>
你也可以这样做:让你的主页加载普通的http,然后当浏览器将协议升级到websockets,然后升级到https。
答案 1 :(得分:0)
如果我从之前的故障排除中正确回想起来,客户端函数io()
必须不带参数(在这种情况下,它会连接到与加载包含网页相同的原点,或者必须传递实际的URL)
所以,当你这样做时:
var HOST = ":4002";
io(HOST);
你正在做的事情:
io(":4002");
这不是它理解的形式。以下是一些可行的表格:
io(); // connect to same host and port as the containing webpage
io("https://somehost:4002"); // connect to specific host and port
io()
的具体文档是here。
io(url[, options])
url (String)
options (Object)
Returns Socket
如果它显示url
,则需要一个格式化为URL的实际网址。
要创建用于socket.io的https服务器,首先创建服务器,然后将服务器传递给socket.io,如下所示:
const https = require('https');
const fs = require('fs');
const options = {
key: fs.readFileSync('agent2-key.pem'),
cert: fs.readFileSync('agent2-cert.pem')
};
// create server and start it
const server = https.createServer(options).listen(4002);
// attach socket.io to your server
const io = require('socket.io')(server);
// attach event handlers to socket.io
io.on('connection', ....);
有关创建https服务器的详细信息,请参阅socket.io https documentation。
您可以监听并记录服务器端可能发生的错误,如下所示:
server.on('clientError', (err, socket) => {
console.log("clientError", err);
}).on('error', err => {
console.log("serverError", err);
});