我最近使用Ejabberd开发了一个即时消息网站,似乎有些消息正在发送两次。以下是具体情况。
用户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>
当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>
几分钟后,任何一位客户都会收到:
<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>
收到上述消息的客户端将发送ping
<body rid='872290555' xmlns='http://jabber.org/protocol/httpbind' sid='cc0604ed5e728d88216c3bb9124fc39ed574cf5b'/>
该客户端将再次收到之前发送给它的所有消息
<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,从5280端口连接到http-bind,并禁用mod_mam和mod_muc。我确实有Ejabberd的日志,但它很大,我可以提供必要的日志。
每次客户端丢失连接时都会重新发送消息,并且将再次传递发送给用户的每条消息。
我有几天烦人的问题,任何建议将不胜感激。谢谢您的时间:))