node.js - 让 Socket.io 与新的 SSL 加密网站一起工作

标签 node.js ssl encryption https socket.io

抱歉,如果我遗漏了一些信息,这是我在 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/

相关文章:

javascript - Node.js 中的 sqlite3 不从 INSERT 回调返回 lastID

javascript - 其他形式的字符

Java TLS-PSK 套接字

apache - 将 http 重定向到 https

javascript - 在 Meteor Js 中加密 Mongodb 数据

node.js - 查询 Mongoose 中的所有数组匹配项

javascript - 运行应用程序的多个实例

ssl - Windows 7下的makecert问题

c# - WinRT RSA 加密大数据缓冲区

java - 可用的填充方案是否符合 BSI 指南