抱歉,如果我遗漏了一些信息,这是我在 stackoverflow 上的第一篇文章。
我的网站有定期的 http 请求,但今天我在我的网站上添加了 SSL 加密,因为我听说它会吸引更多的流量到我的网站,但是在我为我的网站添加 SSL 之后我从 socket.io 收到错误:“ERR_CONNECTION_CLOSED”。
编辑:另一个重要的注意事项是,当我使用 http 而不是 https 键入 url 时,套接字连接到端口。
这是服务器端用来连接端口的: var io = require('socket.io')(4002);
这是客户端用来连接到端口的:
var HOST = ":4002"; SOCKET = io(主机);
在此先感谢您的帮助。
最佳答案
如果我从之前的故障排除中没有记错的话,客户端函数 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,格式为 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', ....);
参见 socket.io https documentation有关创建 https 服务器的更多详细信息。
您可以像这样监听并记录服务器端可能发生的错误:
server.on('clientError', (err, socket) => {
console.log("clientError", err);
}).on('error', err => {
console.log("serverError", err);
});
关于node.js - 让 Socket.io 与新的 SSL 加密网站一起工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42823613/