Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 聊天系统中的消息跟踪_Javascript_Node.js_Redis_Mqtt_Pusher - Fatal编程技术网

Javascript 聊天系统中的消息跟踪

Javascript 聊天系统中的消息跟踪,javascript,node.js,redis,mqtt,pusher,Javascript,Node.js,Redis,Mqtt,Pusher,我们已经在Node.JS中构建了一个聊天系统。其中,我们有三个用于传递消息的通道,一个使用mqtt协议,第二个使用第三方服务推送器通道,第三个基于gcm接收的消息获取服务。一旦消息从一个用户发送到第二个用户,它就会存储在redis中,直到它被发送到第二个用户为止。 我们面临的问题是,我们无法跟踪未送达的丢失邮件 你知道我们如何在聊天室里追踪信息吗 我们尝试了ack来自客户端的消息。但有时由于api故障等原因,我们也无法获得ACK。因此,我们无法跟踪消息 我还研究了消息传递系统,其中一些使用基于队

我们已经在Node.JS中构建了一个聊天系统。其中,我们有三个用于传递消息的通道,一个使用
mqtt
协议,第二个使用第三方服务推送器通道,第三个基于
gcm
接收的消息获取服务。一旦消息从一个用户发送到第二个用户,它就会存储在redis中,直到它被发送到第二个用户为止。 我们面临的问题是,我们无法跟踪未送达的丢失邮件 你知道我们如何在聊天室里追踪信息吗

我们尝试了
ack
来自客户端的消息。但有时由于
api
故障等原因,我们也无法获得
ACK
。因此,我们无法跟踪消息

我还研究了消息传递系统,其中一些使用基于队列的消息代理。我正在考虑为此使用rabbit mq。有人能解释一下message broker是否能更清晰地传递消息吗?

可能(除非有特殊情况)pub/sub不是您需要的合适工具。在这种情况下,pub/sub(mqtt)的问题是这是一种广播发布,这意味着您只是为订阅该主题的人发布了一条消息。发布/订阅有一种称为服务质量(QoS)的东西,它有3个级别,其中,代理处理此消息的行为将取决于您想要的传递的可靠性:

服务质素包括:

  • 最多一次(0)
  • 至少一次(1)
  • 正好一次(2)
QoS级别2可能是您需要的级别,在该级别中,消息将被重试,直到它被传递到接收方,因此,如果它(接收方)不可用,代理将继续尝试传递消息,但QoS级别2的问题是,并非在所有发布/订阅服务上都可用(我认为Redis没有,至少我知道)。。。第二,为了建立这个QoS级别,您需要知道谁是所有的接收者

在这里,您可以找到有关QoS的更多详细信息:

我认为这个项目所需要的最好(也许最简单)的工具是

  • 文档数据存储(NoSQL),用于使用UUID和 时间戳
  • Web套接字通知所有连接的客户端有关新的 信息。这将是一个渠道,也提供新的收入 消息(也可以用于获取旧消息,但取决于 根据需求水平)
  • 聊天服务器不可用时保留消息的本地存储
  • 就这样


    也许使用发布/订阅服务看起来更简单,因为它处理接收、管理和传递消息的复杂性,但它们的设计更适合于与随时间进出而不知道其他人的客户端分离。

    你检查过Redis Streams吗?这个问题太广泛了,请阅读关于什么是好的堆栈溢出问题的帮助