next.js Pusher创建过多并发连接

unftdfkk  于 9个月前  发布在  其他
关注(0)|答案(1)|浏览(72)

我试图使用推流库创建一个实时聊天应用程序。我使用Next.js。我遵循文档和实时功能的工作,但当我只是在网站上乱弄时,我创建了许多并发连接。
我发现这篇文章由pusher:Why Am I Seeing More Channels Connections Than I Expect?.
它说:在使用React时,你需要在useEffect中使用空的dependency array []初始化它。这个useEffect只会在页面初始化时运行一次。

React.useEffect(() => { 
    const pusher = new Pusher("APP_KEY", {cluster: "CLUSTER"});
}, [])

字符串
我在我的项目中做到了这一点,但它仍然保持着太多的联系。
这就是我曾经尝试过的:

useEffect(() => {
    const pusher = new Pusher(process.env.NEXT_PUBLIC_PUSHER_APP_KEY!, {
      cluster: "us3",
    });
    const channel = pusher.subscribe("channel");

    const eventHandler = () => {
      console.log("event");
    };
    channel.bind("event", eventHandler);

    return () => {
      channel.unbind("event", eventHandler);
      pusher.unsubscribe("channel");
      pusher.disconnect();
    };
  }, []);


我试着在my _app.tsx中这样做,只是在一个随机文件中,我试着不使用pusher.disconnect()在最后,我试着从另一个文件导入pusher示例,就像我在视频中看到的那样。无论我尝试什么,每当我在页面之间导航时,它总是创建更多的pusher连接。
Pusher文档说它应该只自动创建一个连接并重用它,但这不是我正在发生的事情。
如果有任何更多的信息,将有助于解决这个问题,请让我知道。谢谢!

2o7dmzc5

2o7dmzc51#

我也有同样的行为,但只是在发展中。
在Vercel上部署到生产环境时,整个应用程序中只创建一个推送器示例。
我怀疑开发环境中的hot module replacement (HMR)可能是原因,导致创建新示例而没有正确清除以前的示例。
为了避免达到dev中允许的最大并发连接数,您只需重新启动浏览器和dev环境即可清除所有pusher示例。
但是,在生产环境中,当您在新标签页中访问您的网站时,您将初始化一个新的推送器示例。如果您希望在多个标签页中共享单个连接,则必须使用Shared Web Workers(https://pusher.com/blog/reduce-websocket-connections-with-shared-workers/#introduction)

相关问题