gpt4 book ai didi

node.js - sails.js 中的多个单独聊天

转载 作者:搜寻专家 更新时间:2023-11-01 00:44:00 24 4
gpt4 key购买 nike

我在 sails.js 上看到了几个聊天功能示例。然而,它们都创建了一个大聊天,所有用户都在其中。

如何创建多个聊天(以便在一个聊天中发布的消息在另一个聊天中不可见)。

我不确定我是否正确理解了问题。看起来发生的事情是客户端执行 io.socket.post('/message', { someMessageData }) 并因此订阅了所有消息。

有没有办法过滤它(在服务器端)它只订阅了一个聊天室的消息。

我看到套接字有 id。如果服务器端直接使用 socket.io,我将只收集需要向其发送消息的 ID 列表。

但是,Sails.js 隐藏了这个级别。结果,我不确定如何在服务器上配置它。

我看到了similar question .然而,它相当陈旧(考虑到 Sails.js 的变化速度)。我不确定我应该把关于 Model.subscribe 和 Model.publish 的代码放在哪里,考虑到它们都是按照惯例隐藏的(所以看起来我需要在它自动订阅时覆盖一些默认行为)。

最佳答案

首先您需要覆盖findcreate 蓝图according to this .

第二,细看广告找到蓝图。为了实现您的目标,您需要更新查询条件并加入适当的(均值过滤的)房间。

更新条件示例:

// Look up the model
var Model = actionUtil.parseModel(req),
criteria = actionUtil.parseCriteria(req),
user = req.user && req.user.id || 0,
allowed = user ? [0, user] : [0],
watchFilters = req.options.hasOwnProperty('watchFilters') ? req.options.watchFilters(req) : false,
classRoom = "sails_model_create_" + Model.identity;

// i need filter by authenticated user so forbidden all other requests
if (allowed.indexOf(user) === -1) {
return res.forbidden();
}

if (watchFilters) {
classRoom = _.reduce(Object.keys(watchFilters), function (classRoom, field) {
return classRoom + "_" + field + "_" + watchFilters[field];
}, classRoom);
}

if (_.result(Model, 'ownerFiltered')) {
criteria.user = user
}

还有watch方法的单次调用,

if (req.options.autoWatch) { Model.watch(req); }

您需要将其替换为:

if (req.options.autoWatch) {
sails.sockets.join(socket, classRoom);
sails.log.silly("Subscribed socket ", sails.sockets.id(req.socket), "to", classRoom, "filtered by", watchFilters);
}

为了加入合适的房间。

第三种是用自己的broadcast 调用替换create 蓝图中对publishCreate 的调用:

Model.broadcast(classRoom, Model.identity, {
verb: 'created',
data: data,
id: data[Model.primaryKey]
}, req.socket);

现在你可以用这样的东西过滤你的模型:

watchFilters: function (req) {
return {
user: req.user.id,
assembly: req.user.assembly || 1
};
},

关于node.js - sails.js 中的多个单独聊天,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25337262/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com