【问题标题】:Sails.js simple private messaging (pub/sub and models)Sails.js 简单的私人消息传递(发布/订阅和模型)
【发布时间】:2015-12-01 14:32:57
【问题描述】:

我的目标:

使用Sails.js 和尽可能简单的代码创建一个私人消息传递平台


最佳实践假设:


我的问题:

  • 我可以只使用某些新型号的插座手表(例如,查找用户 ID 与发件人或收件人 ID 匹配的位置)还是我需要设置房间?选择性观看似乎要容易得多,但文档似乎不支持它。
  • 如果我的上述任何假设或问题都不是实现目标的最佳方式,那么使用 Sails 实现私人消息传递的最简单方法是什么?

我的尝试:

【问题讨论】:

  • 每个问题都应该像这个一样清晰。
  • 你想在这里只支持直接聊天吗?或者可以有多人聊天的房间吗?
  • 乍一看,房间似乎是最简单的解决方案。不幸的是,没有选择性的 .watch。
  • 是的,您的问题并不清楚为什么您认为房间不是最佳解决方案。假设您希望每个连接的套接字为特定用户接收该用户的消息,那么您提出的任何实现都只是对房间的重新散列。

标签: javascript node.js sockets sails.js publish-subscribe


【解决方案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)
猜你喜欢
  • 2019-11-06
  • 1970-01-01
  • 1970-01-01
  • 2016-07-03
  • 2016-11-25
  • 2015-10-07
  • 2017-06-21
  • 2011-08-20
  • 2021-02-15
相关资源
最近更新 更多