Javascript RxJS:与多个单独的观测值相比,单个观测值有什么缺点吗?

Javascript RxJS:与多个单独的观测值相比,单个观测值有什么缺点吗?,javascript,node.js,rxjs,Javascript,Node.js,Rxjs,RxJS:在我目前正在开发的应用程序Node.js中的服务器上,我正在尝试确定哪一个更好:一个单独的流,处理所有来自观察对象的传出发射(通过套接字连接进一步发射),或者将我的观察对象划分为多个类别。一种方法比另一种方法有缺点吗?让我举例说明我想问的问题 例如:如果您要制作一个聊天应用程序,您会设置一个单一的流,并通过聊天室过滤订阅,例如: handleEverythingObservable // STREAM OF ALL ROOMS .filter(obj => obj.chatR

RxJS:在我目前正在开发的应用程序Node.js中的服务器上,我正在尝试确定哪一个更好:一个单独的流,处理所有来自观察对象的传出发射(通过套接字连接进一步发射),或者将我的观察对象划分为多个类别。一种方法比另一种方法有缺点吗?让我举例说明我想问的问题

例如:如果您要制作一个聊天应用程序,您会设置一个单一的流,并通过聊天室过滤订阅,例如:

handleEverythingObservable // STREAM OF ALL ROOMS
  .filter(obj => obj.chatRoom === joinedChatRoom)
  .subscribe(emitToConnectedSocket);
或者您是否有一个对象将流划分为类别(如房间)并具有多个单独的流,如:

objectOfObservables = {
  room1: room1Observable, // STREAM OF A SINGLE ROOM
  room2: room2Observable // STREAM OF A SINGLE ROOM
};

objectOfObservables.room1.subscribe(emitToConnectedSocket);
// NO FILTERING NECESSARY
有没有什么设计原则会让你选择一种方式而不是另一种方式,或者你会做一些完全不同的事情?选择这些模式中的一种会有任何缺点吗?如果一个可观察对象必须处理每一个对象,那么似乎有可能发生阻塞。
我在想,如果我分割流,如果流是空的,我可以终止它们,并在订户寻找特定房间时重新打开它们。

在您的用例中,我会选择集中式可观察

  • 可以观察到的房间连接上有非常相似的流,除了房间的名称之外,没有太多的地方需要将它们分开并增加复杂性

  • 在阻塞的情况下,您创建的任何一种方法都应该支持合并、切片、延迟等,以便重用。它是否会创建阻塞通常取决于您将要创建的那些小的可观察段,例如,当它失败时忘记重试可观察段,或者错误处理不佳等。您总是使用.do()运算符进行调试

  • 如果需要,使用“接近”选项,您始终可以创建单独的房间流

    让roomA$=handleEverythingObservable.filter(obj=>obj.chatRoom===joinedChatRoom.filter(obj=>obj.name===='roomA')

  • 在我看来,拆分比组合更容易(如果在某些情况下处理不好,可能会遇到异步/同步问题),并且允许更好的灵活性


  • 谢谢你的回复。我喜欢你说话的方式。我将在单个流中构造它以保持简单性。