当前位置: 首页 > 知识库问答 >
问题:

使用socket.io的单页应用程序中特定于节的侦听器

潘自强
2023-03-14

我正在构建一个具有实时功能的应用程序(通知,实时评论,…,当然还有经典的聊天室)。它的结构是一个单页应用程序。我正在使用page.js来处理路由、require.js,目前,还有一个简单的自定义mvc框架。后端使用node和Socket.io提供实时支持。

事情是这样的,我有不同的部分,像家庭,帖子,聊天。每个部分都是基于路由动态呈现的。现在,我应该如何为每个节绑定特定的套接字事件?我不想收听与当前查看部分无关的事件。我是否应该在用户每次更改节时针对不同的命名空间创建一个新的连接?还是应该删除套接字中的所有事件侦听器,并附加一组新的事件?我不知道什么是最好的方法,或者socket.io是否是最好的选择。

谢了。

共有1个答案

邰钟展
2023-03-14

哇哦。我在谷歌发现了这个问题,我意识到我从来没有发布过我的解决方案。

多亏了这个答案,我解决了使用房间而不是名称空间。因此,当用户更改节时,socket会发出一个“changeSection”事件。在serverside中,我离开旧部分对应的房间,加入新部分:

io.sockets.on('connection', function (socket){
  socket.on('changeSection', function (section){
    // Leave all previous rooms
    for (var room in io.sockets.manager.roomClients[socket.id]) socket.leave(room.slice(1));
    // Join new
    socket.join(section);
  });
});

然后,我将特定于节的事件(如通知、新评论、聊天消息)发送到相应的房间。

 类似资料:
  • 问题内容: 我如何设置应用程序范围的键侦听器(键盘快捷键),以便在按下组合键(例如+ + )时,将在Java应用程序中调用特定操作。 我知道可以设置菜单项的键盘快捷键,但就我而言,该应用程序没有菜单栏。 问题答案: 查看Java教程的“ 如何使用键绑定”部分。 您需要在组件的一个中创建并注册一个,并在应用程序的一个组件中注册一个(, Action Name )对。假设您没有,则可以在应用程序中向顶

  • 问题内容: 我的应用程序中有一个通知表的Firebase 事件侦听器,当该应用程序在后台时,我想触发推送通知。 这是监听器: 当应用程序位于前台时,这非常有用。然后,在我的应用程序委托方法中添加一个后台观察器,以在后台对其进行观察: 但是当应用程序在后台运行时,事件观察器不会触发。Ive调查了Firebase Cloud Messenger以解决此问题,并遇到了类似这样的帖子: 是否可以使用Fir

  • 问题内容: 是否可以创建具有相同路由和相同中间件的,同时侦听HTTP和HTTPS的Express服务器? 目前,我在高速上的HTTP做到这一点,有安全通道隧道HTTPS来表达,但我更喜欢一个纯粹的节点解决方案。 我可以使用以下代码来做到这一点,但是可以使用标记为私有的方法: 问题答案: 您可以通过以下方式共享实现:

  • 问题内容: 例如,我的想法是: File1.js File2.js 这段代码是用于节点服务器的,此代码会出现问题吗? 问题答案: 不,只需使用相同的“ io”对象。 File1.js File2.js app.js index.html

  • 我正在Windows 64位机器Java 7上运行Tomcat 7.0.70和Eclipse Kepler。当我从Eclipse运行我的软件时,它可以完美地工作,但只有在我将项目导出到WAR文件后,将项目部署到Tomcat时,我才会出现以下错误: AppContextListener是我自己的文件,它实现了ServletContextListener。这是文件的一部分,我删除了其中除了contex

  • 问题内容: 我有主要的应用程序在哪里与值表。然后,我单击“添加”按钮,新的CUSTOM(我自己创建)出现了JDialog类型弹出窗口。在这里,我可以输入值,打一些勾,然后单击“确认”。因此,我需要从对话框中读取该输入,以便可以将此值添加到主应用程序中的表中。按下“确认”按钮时如何收听,以便在此之后可以读取该值? 问题答案: 如果在用户按下后对话框消失,请确认: 你希望有对话的行为如同一个 模态 的