我在我的项目中使用Socket.io。我为我的套接字创建了一个插件...
await server.register(socket_connections);
其中 socket_connections
如下...
const connect = require("./controllers/connect");
module.exports = {
name: "SocketPlugin",
register: connect.socket
};
其中 connect.socket
是我的套接字连接...
exports.socket = async (server) => {
const io = require("socket.io")(server.listener);
io.on("connection", socket => {
console.log("Socket Connection");
});
}
我的问题是 io
是在插件内部定义的,但事实不应该如此。如果在插件内部定义,服务器连接将不断重新启动。例如,在我的服务器控制台中,定期打印以下内容...
Socket Connection
Socket Connection
Socket Connection
...
我意识到,解决方案是在插件外部定义服务器连接。因此,我想在插件外部定义 const io = require("socket.io")(server.listener);
,最好在发生 server.register
的同一文件中,并将连接传递给插件。
这可以在 Hapi.js
中完成吗?这似乎是我可以建立正确的套接字连接的唯一方法,否则我必须完全放弃该插件,这有点费力。
最佳答案
我找到了一种解决方法来防止我的套接字定期断开连接。 answer在这里。
基本上,我的服务器每 25 秒ping一次客户端,并且客户端必须每 25 秒定期pong一次服务器。 25 秒只是一个任意数字,您可能可以选择更多。
通过pinging和ponging,这可以防止socket.io重新启动,当它闲置太久时,它似乎会这样做。
关于node.js - Hapi.js - 如何将连接传递给插件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53662155/