Hapi.js - 如何将连接传递给插件
Hapi.js - How to pass connections to plugins
我在我的项目中使用 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
中完成吗?这似乎是我可以建立正确套接字连接的唯一方法,否则我必须完全取消有点费力的插件。
我找到了一个解决方法来防止我的套接字定期断开连接。 在这里。
基本上我的服务器 ping 客户端每 25 秒一次,客户端必须定期 pong 服务器每 25 秒一次。 25 秒只是一个任意的数字,您可能可以再多一些。
通过 ping 和 ponging,这可以防止 socket.io 重新启动,当它闲置太久时似乎会这样做。
我在我的项目中使用 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
中完成吗?这似乎是我可以建立正确套接字连接的唯一方法,否则我必须完全取消有点费力的插件。
我找到了一个解决方法来防止我的套接字定期断开连接。
基本上我的服务器 ping 客户端每 25 秒一次,客户端必须定期 pong 服务器每 25 秒一次。 25 秒只是一个任意的数字,您可能可以再多一些。
通过 ping 和 ponging,这可以防止 socket.io 重新启动,当它闲置太久时似乎会这样做。