Javascript 条件发布事件 介绍
我正在使用sails构建一个私人消息传递系统,但这个问题几乎可以应用于任何事情。我将以消息传递系统为例,使问题更加清楚。作为一点背景信息,我正在使用最新的sails 0.10 RC 问题 Sails允许您在会话和pubsub中使用redis,这允许您在多个服务器上进行扩展。这一切都非常简洁,工作非常出色,但它留给我的问题是如何将事件发布到特定的连接套接字(客户端) 有时,您希望只向参与者发布事件,就像私有消息传递系统一样。线程中的新消息只应通知作者和收件人。你将如何做到这一点?我知道你可以订阅一个客户到一个特定的模型实例,通知客户在所述模型中的变化;我还知道可以向客户机订阅模型,通知他们新创建(保存)的模型实例。正是后者,Javascript 条件发布事件 介绍,javascript,sails.js,Javascript,Sails.js,我正在使用sails构建一个私人消息传递系统,但这个问题几乎可以应用于任何事情。我将以消息传递系统为例,使问题更加清楚。作为一点背景信息,我正在使用最新的sails 0.10 RC 问题 Sails允许您在会话和pubsub中使用redis,这允许您在多个服务器上进行扩展。这一切都非常简洁,工作非常出色,但它留给我的问题是如何将事件发布到特定的连接套接字(客户端) 有时,您希望只向参与者发布事件,就像私有消息传递系统一样。线程中的新消息只应通知作者和收件人。你将如何做到这一点?我知道你可以订阅一
create
动词给我带来了一些麻烦。我不想让所有使用消息传递系统的人都在他们不在的线程中接收新消息的更新。这将是一个隐私问题
TL;博士
如何根据相关模型的属性值(
author
和recipient
)筛选哪些客户端接收create
动词事件?是否有其他方法确保只有这些客户端收到模型的更新?您在这里有几个选项,但所有选项都涉及不真正使用默认的publishCreate
方法,该方法只会向通过.watch()
订阅的所有人发送创建的消息
第一个选项是使用关联将您的消息
模型链接到应该知道它的用户,然后收听publishAdd
消息,而不是publishCreate
。例如,如果消息
实例与代表发送者和接收者的用户
实例之间存在关联,则默认的publishCreate
逻辑也将触发相关用户的publishAdd
,指示新的消息
已添加到他们的消息
(或任何您命名的)集合中
第二个选项是覆盖消息的默认publishCreate
,使其仅发送给正确的用户。例如,如果只通知收件人,那么在api/models/Message.js中,您可以执行以下操作:
attributes: {...},
publishCreate: function (values, req, options) {
User.publish(values.recipient, {
verb: "created",
data: values,
id: values.id
}, req);
}
作为一种替代方法,您可以将自定义代码放在模型的afterPublishCreate
方法中,默认的publishCreate
将调用该方法。这样做的好处是维护处理关联模型调用publishAdd
的默认代码;诀窍就是确保没有人通过.watch()
订阅模型教室,这样默认的publishCreate
就不会向不应该看到它们的用户发送created
消息。可能是@ScottGress的重复,我不认为是。我想要为特定用户创建谓词。我想我可以用我自己的emit解决这个问题,但我更愿意用蓝图来找到解决方案。我已经用不同的方法解决了这个问题,我自己推出了事件。我更喜欢您的(第二个)解决方案,并将相应地实施它。谢谢