RxJS:单可观测数据比多个独立可观测数据有什么缺点?
RxJS:在应用程序中的Node.js服务器上我正在处理我试图确定哪个更好:处理来自observables的所有输出辐射的单个流(通过套接字连接进一步发射) ,或者将我的观察分为几类。相对于另一种方式有什么缺点吗?让我说明我试图问...RxJS:单可观测数据比多个独立可观测数据有什么缺点?
例如:如果你是做一个聊天应用程序,你会建立一个单一的数据流,并有通过聊天室过滤掉订阅如:
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()运算器调试
-
With approach on你可以随时创建一个单独的房间流,如果你需要
让roomA $ = handleEverythingObservable.filter(obj => obj.chatRoom === joinedChatRoom).filter(obj => obj.name ==='roomA' )
在我看来,拆分比组合更容易(如果在某些情况下处理不好,很可能会遇到异步/同步问题),并允许更好的灵活性
感谢您的回复。我喜欢你的方式。我将在单一流中构造它以保持简单。 –