代码之家  ›  专栏  ›  技术社区  ›  Ariam1

meanjs聊天实现:即使离开聊天模块也不会丢失消息

  •  1
  • Ariam1  · 技术社区  · 10 年前

    这是一个关于在AngularJS中实现Socket.io的最佳实践的问题。

    在关于这个主题的专用书中,我找到了一个简单的聊天实现。通过以下方式实现:

    1. Socket.io包装在服务中
    2. 聊天控制器使用此服务更新范围变量
    3. 视图更新为关于范围变量以显示消息

    我实施了它,发现了一个问题,但我不知道有效的解决方案。

    场景:

    1. 用户A正在与B聊天
    2. B将聊天模块留给应用程序的另一个模块
    3. A此时向B发送消息
    4. B丢失了消息,当返回聊天模块时不会收到消息:只有聊天模块实现了Socket.on!

    低效的解决方案: -在所有模块的每个控制器中实现Socket.on listenner,并打破DRY原则!:-)

    我对Angular中的rootScope略知一二,但这是在Angular中提供解决方案的最佳方式吗。。。

    那么如何做到这一点:

    1. B访问应用程序的任何模块,Angular接收并保存发送给B的所有消息
    2. 返回聊天模块,B有所有可用消息

    rootScope是要考虑的,还是AngularJS还有其他功能要使用?

    1 回复  |  直到 10 年前
        1
  •  1
  •   Joseph Joestar    8 年前

    我认为最好的方法是将聊天消息存储在数据库中。这是因为在 聊天室客户端控制器 文件 $scope.message 变量初始化为空。因此,通过将所有消息存储在数据库中,我们可以创建一个服务工厂,用于在用户返回聊天页面后查询所有消息以及最新消息。第一步是帮助存储消息。

    对于第二步,我们可以在核心客户端控制器中创建一个套接字 聊天信息 事件由于核心链接到所有模块,我们将能够在发布新消息时得到通知。