gpt4 book ai didi

node.js - 如何仅在我网站的特定页面上使用 socket.io?

转载 作者:搜寻专家 更新时间:2023-10-31 22:26:49 26 4
gpt4 key购买 nike

假设我有一个网站,主页上不需要网络套接字,但在其他一些相对路径(例如“/new”)上需要它。

假设我需要“连接”事件来计算登录到“主页”页面和"new"页面的用户数。

我尝试在相对路径中配置 socket.io 'connection' 事件,例如:

app.get('/new',
function(req,res) {
io.sockets.on('connection', function (socket) {
.....
}
});

但是:

  1. 效果不佳。当有很多用户连接时,该事件会在不应该发生的时候发生。
  2. 我在网络上没有看到任何与上述示例类似的示例。所有 socket.io 事件都在主文件 (app.js) 中配置一次。

如何做到?

最佳答案

回答您的问题:

  1. 很明显,因为当用户点击 /new 时,它的处理程序会触发并将连接处理程序添加到 io。这是一个巨大的内存泄漏。

  2. 这与上面的相关。您不希望在用户每次点击/new 时都添加连接处理程序。

现在要解决你的问题,我认为最好的办法是调用(在浏览器端)

io.connect("http://localhost/new");

然后在您的 Node.js 应用中:

io.of("/new").on("connection", function (socket) {
// here are connections from /new
});

代码应该放在顶层,而不是在路由处理程序中。如果你想让它更动态,那么你可以创建自己的子协议(protocol):

  1. 连接到io服务器:io.connect("http://localhost);
  2. 发送消息我在/new;
  3. 在服务器上获取该消息并将该连接存储在适当的列表中。

当然,您可以在路由处理程序中指定您是否希望客户端连接到 socket.io 服务器(只需传递某种标志)。

关于node.js - 如何仅在我网站的特定页面上使用 socket.io?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17988300/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com