Sails.js 简单的私人消息传递(发布/订阅和模型)
Posted
技术标签:
【中文标题】Sails.js 简单的私人消息传递(发布/订阅和模型)【英文标题】:Sails.js simple private messaging (pub/sub and models) 【发布时间】:2015-12-01 14:32:57 【问题描述】:我的目标:
使用Sails.js 和尽可能简单的代码创建一个私人消息传递平台
最佳实践假设:
使用Sails.js Webockets 进行实时通知 将 Sails.js PubSub 用于 DB 与 websockets 一起使用 使用Sails.js .watch() 获取消息我的问题:
我可以只使用某些新型号的插座手表(例如,查找用户 ID 与发件人或收件人 ID 匹配的位置)还是我需要设置房间?选择性观看似乎要容易得多,但文档似乎不支持它。 如果我的上述任何假设或问题都不是实现目标的最佳方式,那么使用 Sails 实现私人消息传递的最简单方法是什么?我的尝试:
订阅和观看套接字 阅读Sails.js documentation 查看sailsChat 示例(使用房间) 在 *** 和 Google 中搜索风帆聊天示例【问题讨论】:
每个问题都应该像这个一样清晰。 你想在这里只支持直接聊天吗?或者可以有多人聊天的房间吗? 乍一看,房间似乎是最简单的解决方案。不幸的是,没有选择性的 .watch。 是的,您的问题并不清楚为什么您认为房间不是最佳解决方案。假设您希望每个连接的套接字为特定用户接收该用户的消息,那么您提出的任何实现都只是对房间的重新散列。 【参考方案1】:我猜最简单的方法是使用在sails中实现的socket.io,如果我没记错的话,它只是简单地称为socket。
所有控制器都可以通过 socket.io(客户端)IIRC 调用。 我采用的方法是创建一个名为消息的模型,然后简单地为消息创建几个端点。如果您想使用模型(发布/订阅),可以只订阅您想要的模型。即使您有很多用户,您也可以只为每个用户订阅一个模型。
我以前做的是手动操作,当我收到一条消息时,我会立即将其发送给正确的客户。但是,如果您想编写更少的代码,您可能只需让用户订阅您的模型Model.subscribe()
(http://sailsjs.org/documentation/reference/web-sockets/resourceful-pub-sub/subscribe)
因此,当一条消息添加到数据库时,您可以将其发送给您需要的任何人。
这是另一个基于sails.js 构建的聊天示例:https://github.com/asm-products/boxychat-old
【讨论】:
如果每个客户端都在观看新的消息模型,那么他们会收到发给其他用户的消息,对吧?我想确保服务器只将消息发送到接收客户端,因此如果可能的话,选择性观看会很好。根据文档,subscribe() 方法仅获取 existing 数据库记录中的更改(它不接收 .publishCreate() 消息)。是否存在选择性 watch()?如果不是,最简单的消息传递方式是什么? 我有一个连接到用户 ID 的套接字列表,当我发送消息时,例如POST /message/user1
(来自redis)然后给他发消息list['user1'].emit('privateMessage', msg);
当然可以,但这似乎并不比使用房间更容易。你为什么选择它而不是房间?
您的意思是为每个用户创建一个房间?所以所有的会话都加入了那个房间,然后你发布到那个房间来接触用户?这实际上是我在第二个版本中使用的一种方法,但没有使用sails。
我关心的是在多个位置、标签、电话等中与同一个用户聊天(每个套接字连接都有不同的 id)以上是关于Sails.js 简单的私人消息传递(发布/订阅和模型)的主要内容,如果未能解决你的问题,请参考以下文章