RxJS:在应用程序中的Node.js中的服务器上我正在努力确定哪个会更好:处理来自可观察量的所有传出排放的单个流(进一步发展)由套接字连接发出的),或将我的observable划分为类别。单向另一种方式有任何缺点吗?让我说明一下我想问的问题......
例如:如果你要创建一个聊天应用程序,你会设置一个流,并通过聊天室筛选出订阅,例如:
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
是否有任何设计原则会导致您选择一种方式而不是另一种方式,或者您是否会做一些完全不同的事情?选择其中一种模式会有任何不利之处吗?如果单个observable必须处理每个对象,似乎可能有阻塞的机会。 我想如果我将流分开,我可以在它们空的时候终止它们,并在用户寻找特定房间时重新打开它们。
答案 0 :(得分:1)
在你的用例中,我会选择集中观察。
是非常相似的流,除了房间的名称,没有多大的意义将它们分开并增加复杂性
在阻塞的情况下,任何一种方法,你创建的observable都应该支持组合,切片,延迟等,以便重用。它是否会创建阻塞通常取决于你将要制作的那些小的可观察段,例如,当它失败时,忘记重试observable,或者错误处理等。你总是使用.do()运算符进行调试
如果您需要
,可以随时创建单独的房间流让roomA $ = handleEverythingObservable.filter(obj => obj.chatRoom === joinedChatRoom).filter(obj => obj.name ==='roomA')
在我看来,拆分比合并更容易(如果在某些情况下处理得不好,可能会遇到异步/同步问题)并允许更好的灵活性