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 简单的私人消息传递(发布/订阅和模型)的主要内容,如果未能解决你的问题,请参考以下文章

设计和简单的私人消息

Spring STOMP over Websocket - “私人”消息传递

Sails.js 用于用户注册的 flash 消息

Sails.js 对套接字请求的授权

消息订阅-发布机制(方便组件之间的数据传递)

热门技术EventBus 3.0,让事件订阅更简单,从此告别组件消息传递烦恼~