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

时间:2015-03-01 00:11:35

标签: angularjs chat meanjs

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

在关于这个主题的专门书中,我发现了一个简单的聊天实现。这是通过这种方式实现的:

  1. Socket.io包含在服务中
  2. 聊天控制器使用此服务来更新范围变量
  3. 根据范围变量更新视图以显示消息
  4. 我实施了它并发现了它的问题,但我不知道有效的解决方案。

    情景:

    1. 用户A正在与B
    2. 聊天
    3. B将聊天模块留给应用程序的另一个模块
    4. A此时向B发送消息
    5. B丢失消息,回到聊天模块时不会收到消息:只有聊天模块实现了Socket.on!
    6. 效率低下的解决方案: - 在所有模块的每个控制器中实现Socket.on监听器并打破DRY原则! : - )

      我对Angular中的rootScope了解一点,但这是最好的方式,或者在Angular中提供解决方案的最佳位置/方式......

      所以如何拥有它:

      1. B访问应用程序的任何模块,Angular接收并保留所有发送给B的消息
      2. 返回聊天模块,B包含所有可用消息
      3. 是rootScope要考虑的内容,还是要使用AngularJS的其他功能?

1 个答案:

答案 0 :(得分:1)

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

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

相关问题