Javascript 条件发布事件 介绍

Javascript 条件发布事件 介绍,javascript,sails.js,Javascript,Sails.js,我正在使用sails构建一个私人消息传递系统,但这个问题几乎可以应用于任何事情。我将以消息传递系统为例,使问题更加清楚。作为一点背景信息,我正在使用最新的sails 0.10 RC 问题 Sails允许您在会话和pubsub中使用redis,这允许您在多个服务器上进行扩展。这一切都非常简洁,工作非常出色,但它留给我的问题是如何将事件发布到特定的连接套接字(客户端) 有时,您希望只向参与者发布事件,就像私有消息传递系统一样。线程中的新消息只应通知作者和收件人。你将如何做到这一点?我知道你可以订阅一

我正在使用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解决这个问题,但我更愿意用蓝图来找到解决方案。我已经用不同的方法解决了这个问题,我自己推出了事件。我更喜欢您的(第二个)解决方案,并将相应地实施它。谢谢