Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.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
Erlang 如何找回丢失的<;信息>;Ejabberd/MongooseIM中与XEP-0022相关的事件_Erlang_Xmpp_Chat_Ejabberd_Mongoose Im - Fatal编程技术网

Erlang 如何找回丢失的<;信息>;Ejabberd/MongooseIM中与XEP-0022相关的事件

Erlang 如何找回丢失的<;信息>;Ejabberd/MongooseIM中与XEP-0022相关的事件,erlang,xmpp,chat,ejabberd,mongoose-im,Erlang,Xmpp,Chat,Ejabberd,Mongoose Im,我正在将MongooseIM与XEP-0022事件一起使用,如、、、,以确认消息传递等。我对和的工作感到满意,但对其他两个有一些困难 如果两个用户(聊天)都在线,那么一切都很好。但如果考虑以下用例: 假设第二个用户脱机,第一个用户联机,发送所有4个事件的,然后脱机 然后第二个用户联机(记住,第一个用户现在脱机),该用户收到,作为回报,他发送和事件,现在第二个用户进入脱机阶段 当第一个用户再次联机时,他没有收到任何和事件 简言之,两者都需要同时在线才能发挥作用。因此,我关注的是: 我如何才能确保信

我正在将MongooseIM与XEP-0022事件一起使用,如,以确认消息传递等。我对的工作感到满意,但对其他两个有一些困难

如果两个用户(聊天)都在线,那么一切都很好。但如果考虑以下用例:

  • 假设第二个用户脱机,第一个用户联机,发送所有4个事件的,然后脱机
  • 然后第二个用户联机(记住,第一个用户现在脱机),该用户收到,作为回报,他发送事件,现在第二个用户进入脱机阶段
  • 当第一个用户再次联机时,他没有收到任何事件
  • 简言之,两者都需要同时在线才能发挥作用。因此,我关注的是:

  • 我如何才能确保信息传递并显示给第二个用户,而不必同时在线
  • 我是否遗漏了什么,或者可以通过一些配置更改来解决
  • 我需要在这里使用FCM吗

  • 首先,XEP-0022已被淘汰。最好遵循XSF建议——它是标准化XMPP的基础,并使用更现代的XEPS解决这个问题。也就是说,我将使用
    类通知和
    收据

    我如何才能确保信息传递并显示给第二个用户,而不必同时在线

    您应该使用MongooseIM(或ejabberd)实现的。它将聊天历史记录保存在服务器的数据库中,允许您随时获取过去的对话,而聊天伙伴不再在线

    默认情况下,mod_mam不存储不包含文本的消息(准确地说,没有或空的
    子元素),但它是可配置的,为了存储XEP-333聊天标记,您必须重新配置它。存储XEP-85通知可能没有意义,因为它们只有在两个用户都在线时才有意义

    一旦您能够获取聊天标记,客户端应用程序就必须查询消息存档,处理结果,并找到与当前脱机用户的消息相对应的任何聊天标记。请记住,虽然从在线用户发送的常规标记看起来像这样(来自XEP-333的示例4):


    这样
    northumberland@shakespeare.lit
    知道
    kingrichard@royalty.england.lit
    已收到
    ,即使
    kingrichard@royalty.england.lit
    目前处于脱机状态。

    首先,XEP-0022已被淘汰。最好遵循XSF建议——它是标准化XMPP的基础,并使用更现代的XEPS解决这个问题。也就是说,我将使用
    类通知和
    收据

    我如何才能确保信息传递并显示给第二个用户,而不必同时在线

    您应该使用MongooseIM(或ejabberd)实现的。它将聊天历史记录保存在服务器的数据库中,允许您随时获取过去的对话,而聊天伙伴不再在线

    默认情况下,mod_mam不存储不包含文本的消息(准确地说,没有或空的
    子元素),但它是可配置的,为了存储XEP-333聊天标记,您必须重新配置它。存储XEP-85通知可能没有意义,因为它们只有在两个用户都在线时才有意义

    一旦您能够获取聊天标记,客户端应用程序就必须查询消息存档,处理结果,并找到与当前脱机用户的消息相对应的任何聊天标记。请记住,虽然从在线用户发送的常规标记看起来像这样(来自XEP-333的示例4):


    这样
    northumberland@shakespeare.lit
    知道
    kingrichard@royalty.england.lit
    已收到
    ,即使
    kingrichard@royalty.england.lit
    当前处于脱机状态。

    您所说的FCM是什么意思?好的,我假设您指的是Firebase云消息。是的,Firebase Cloud Messagin我找到的最后一个解决方案是,我将使用普通和元素以及一个特殊元素来区分普通消息节和我的ping消息节之间的差异,以便mod_offline有助于在用户脱机时将其保存为脱机。我将选中忽略消息ping逻辑中的聊天信息节。这将100%起作用。这有点老套,但我没有别的办法。你说什么?你说的FCM是什么意思?好吧,我假设你指的是Firebase云消息。是的,Firebase Cloud Messagin我找到的最后一个解决方案是,我将使用普通和元素以及一个特殊元素来区分普通消息节和我的ping消息节之间的差异,以便mod_offline有助于在用户脱机时将其保存为脱机。我将选中忽略消息ping逻辑中的聊天信息节。这将100%起作用。这有点老套,但我没有别的办法。你说什么?
    <message from='kingrichard@royalty.england.lit/throne'
             id='message-2'
             to='northumberland@shakespeare.lit/westminster'>
      <thread>sleeping</thread>
      <received xmlns='urn:xmpp:chat-markers:0' id='message-1'/>
    </message>
    
    <message id='aeb213'
        from='northumberland@shakespeare.lit'
        to='northumberland@shakespeare.lit/westminster'>
        <result xmlns='urn:xmpp:mam:2' queryid='f27' id='28482-98726-73623'>
            <forwarded xmlns='urn:xmpp:forward:0'>
                <delay xmlns='urn:xmpp:delay' stamp='2010-07-10T23:08:25Z'/>
                <message from='kingrichard@royalty.england.lit/throne'
                    id='message-2'
                    to='northumberland@shakespeare.lit/westminster'>
                    <thread>sleeping</thread>
                    <received xmlns='urn:xmpp:chat-markers:0' id='message-1'/>
                </message>
            </forwarded>
        </result>
    </message>