0

我最近使用 Ejabberd 开发了一个即时消息网站,似乎有些消息被发送了两次。以下是情况的详细信息。

  1. 用户 A 向用户 B 发送了多条消息,格式为:

    <body rid='1874291086' xmlns='http://jabber.org/protocol/httpbind' sid='33549457dc8ad98caceedbb648178f26683fcf8a'>
      <message to='284@ejabberd' from='282@ejabberd' type='chat' xmlns='jabber:client' id='efdf6155-a661-46eb-9b54-88b2790f492a'>
      <body>1</body>
      <data timestamp='1501136608657'/>
      <request xmlns='urn:xmpp:receipts'/></message>
    </body>
    
  2. 当 B 收到消息时,返回:

    <body xmlns='http://jabber.org/protocol/httpbind'>
      <message xmlns='jabber:client' xml:lang='en' to='282@ejabberd/9495456281346940375146' from='284@ejabberd/12680356801999428401210' id='5b1d7c22-381c-4332-a4c9-bc9443a9d296'>
      <received xmlns='urn:xmpp:receipts' id='efdf6155-a661-46eb-9b54-88b2790f492a'/>
      </message>
    </body>
    
  3. 几分钟后,任一客户端都会收到:

    <body xmlns='http://jabber.org/protocol/httpbind'>
      <presence xmlns='jabber:client' to='282@ejabberd/13236655690203912299484' from='282@ejabberd/964025387189976270180' type='unavailable'>
        <status xml:lang='en'>Connection failed: connection closed</status>
      </presence>
    </body>
    
  4. 收到上述消息的客户端将发送 ping

    <body rid='872290555' xmlns='http://jabber.org/protocol/httpbind' sid='cc0604ed5e728d88216c3bb9124fc39ed574cf5b'/>
    
  5. 并且该客户端将再次收到之前发送给它的所有消息

    <body xmlns='http://jabber.org/protocol/httpbind'><message xmlns='jabber:client' xml:lang='en' to='282@ejabberd/13236655690203912299484' from='284@ejabberd/17094073157455939286404' type='chat'>
      <composing xmlns='http://jabber.org/protocol/chatstates'/></message>
      ... all the messages ...
    </body>
    

我正在使用 Strophe 和 Ejabberd 17.04,使用 http-bind 从 5280 端口连接,禁用 mod_mam 和 mod_muc。我确实有来自 Ejabberd 的日志,但它非常大,如果需要我可以提供。

每次客户端失去连接时,消息都会重新发送,并且发送给用户的每一条消息都将再次传递。

我有几天烦人的问题,任何建议将不胜感激。感谢您的时间:)

4

0 回答 0