node.js - Hapi.js - 如何将连接传递给插件

标签 node.js socket.io connection hapi

我在我的项目中使用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 秒只是一个任意数字,您可能可以选择更多。

通过pingingponging,这可以防止socket.io重新启动,当它闲置太久时,它似乎会这样做。

关于node.js - Hapi.js - 如何将连接传递给插件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53662155/

相关文章:

node.js - Sails.js JSON 自定义 View

node.js - 我可以在 socket.io 中获取客户端连接到的房间列表吗?

android - "No Connected Devices",试图将我的 LG 连接到我的 Ubuntu 机器

javascript - 如何将 Socket.io 路由代码分离到不同的文件中

javascript - socket.io 的额外参数

Java:仅在第一次连接到 OracleDriver 时速度很快

java - 当我尝试为 Oracle 数据库创建 Connection 对象时,为什么会出现此 SQLException(没有合适的驱动程序)?

javascript - ES6 中 String.prototype.includes/contains 的区别? .has 呢?

node.js - 能不能把 "node_modules"目录复制到别的机器上,不用每次都运行 "npm install"?

javascript - 如何使用 Babel 在 JavaScript 类中编写正确的私有(private)方法?