meanjs 聊天实现:即使离开聊天模块也不会丢失消息
meanjs chat implementation: not losing messages even if leaving chat module
这是一个关于在 AngularJS 中实现 Socket.io 的最佳实践的问题。
在有关该主题的专着中,我找到了一个简单的聊天实现。是这样实现的:
- Socket.io 包裹在服务中
- 聊天控制器使用此服务来更新范围变量
- 视图更新为显示消息的范围变量
我实现了它并发现了它的问题,但我不知道有效的解决方案。
场景:
- 用户 A 正在与 B 聊天
- B 将聊天模块留给应用的另一个模块
- 此时A向B发送消息
- B 丢失消息,返回聊天模块时不会收到消息:仅实现了聊天模块 Socket.on!
低效的解决方案:
- 在所有模块的每个控制器中实施 Socket.on 侦听器并打破 DRY 原则! :-)
我对 Angular 中的 rootScope 略知一二,但在 Angular 中,这是最好的方法还是在哪里/如何最好地提供解决方案...
那么如何拥有它:
- B 访问应用程序的任何模块并且 Angular 接收并保留发送给 B
的所有消息
- 回到聊天模块,B有所有可用消息
是rootScope要考虑什么,还是要用到AngularJS的其他特性?
我认为最好的方法是将聊天消息存储在数据库中。这是因为在chats.client.controller文件中,$scope.message变量被初始化为null。因此,通过将所有消息存储在数据库中,我们可以创建一个服务工厂,用于在用户返回聊天页面时查询所有消息以及最新消息。第一步是帮助存储消息。
对于第二步,我们可以在核心客户端控制器中创建一个套接字来侦听 chatMessage 事件。由于核心链接到所有模块,我们将能够在发布新消息时得到通知。
这是一个关于在 AngularJS 中实现 Socket.io 的最佳实践的问题。
在有关该主题的专着中,我找到了一个简单的聊天实现。是这样实现的:
- Socket.io 包裹在服务中
- 聊天控制器使用此服务来更新范围变量
- 视图更新为显示消息的范围变量
我实现了它并发现了它的问题,但我不知道有效的解决方案。
场景:
- 用户 A 正在与 B 聊天
- B 将聊天模块留给应用的另一个模块
- 此时A向B发送消息
- B 丢失消息,返回聊天模块时不会收到消息:仅实现了聊天模块 Socket.on!
低效的解决方案: - 在所有模块的每个控制器中实施 Socket.on 侦听器并打破 DRY 原则! :-)
我对 Angular 中的 rootScope 略知一二,但在 Angular 中,这是最好的方法还是在哪里/如何最好地提供解决方案...
那么如何拥有它:
- B 访问应用程序的任何模块并且 Angular 接收并保留发送给 B 的所有消息
- 回到聊天模块,B有所有可用消息
是rootScope要考虑什么,还是要用到AngularJS的其他特性?
我认为最好的方法是将聊天消息存储在数据库中。这是因为在chats.client.controller文件中,$scope.message变量被初始化为null。因此,通过将所有消息存储在数据库中,我们可以创建一个服务工厂,用于在用户返回聊天页面时查询所有消息以及最新消息。第一步是帮助存储消息。
对于第二步,我们可以在核心客户端控制器中创建一个套接字来侦听 chatMessage 事件。由于核心链接到所有模块,我们将能够在发布新消息时得到通知。