1

私はかなり前から ejabberd に取り組んでおり、サードパーティのチャット インフラストラクチャを社内で Ejabberd に置き換えています。プロダクション スイッチだったので、ejabberd に切り替える間、以前のチャット メッセージを維持する必要があります。

そのため、すべての名簿を作成し、ユーザーを ejabberd に移行しましたが、これはすべて正常に機能しています。現在直面している主な課題は、メッセージの移行です。ユーザー、名簿、メッセージに mysql を使用しています。以前のチャット インフラストラクチャから ejabberd mysql にデータを直接プッシュするスクリプトを実行しています。

しかし、ユーザーに接続しているときに、ejabberd を介して送信された新しいチャット メッセージを表示できますが、同じユーザーの移行されたチャットは表示されず、クライアントに反映されません。

誰かがここで助けることができますか?

mysql に入力した 2 つのエントリを次に示します。最初の 1 つは ejabberd エントリで、もう 1 つは手動です。クライアントは最初のエントリを同期できますが、別のエントリは同期できません。

username    timestamp   peer    bare_peer   xml txt id  kind    nick    created_at
xyz-customer    1454573488523175 abc-provider@xxx.amazonaws.com abc-provider@xxx.amazonaws.com  "<message from='xyz-customer@xxx.amazonaws.com/2131165549e1bc6553-32b9-4ec4-92bd-c9ed80fb5374' to='abc-provider@xxx.amazonaws.com' xml:lang='en' id='oG3Vb-568' type='chat'><body> CnsfjffsjJ</body><thread>90275196-0096-4bb4-a95d-d72ea5238f74</thread><request xmlns='urn:xmpp:receipts'/><delay xmlns='urn:xmpp:delay' stamp='2016-02-04T08:11:27.194+00:00' from='xyz-customer@xxx.amazonaws.com/2131165549e1bc6553-32b9-4ec4-92bd-c9ed80fb5374'/><markable xmlns='urn:xmpp:chat-markers:0'/><request xmlns='urn:urbanclap:request' requestId=''/><active xmlns='http://jabber.org/protocol/chatstates'/></message>"   " CnsfjffsjJ"   208044  chat        "2016-02-04 08:11:28"

xyz-customer    1454570506606317 abc-provider@xxx.amazonaws.com abc-provider@xxx.amazonaws.com  "<message from='xyz-customer@xxx.amazonaws.com' to='abc-provider@xxx.amazonaws.com' xml:lang='en' id='I5sO7-2' type='chat'><body>GB hard</body><request xmlns='urn:xmpp:receipts'/><markable xmlns='urn:xmpp:chat-markers:0'/><active xmlns='http://jabber.org/protocol/chatstates'/></message>"    "GB hard"   208045  chat    NULL    "2016-02-04 07:21:46"
4

1 に答える 1

0

メッセージ アーカイブ テーブルをいっぱいにしようとしていると思いますが、オフライン メッセージ配信を期待しています。正しい表にメッセージを追加していることを確認してください。アーカイブテーブルに書き込んでいると思いますが、スプールに書き込む必要があります。

オフライン メッセージを配信するスプール テーブルは、新しいユーザーのログイン時にのみチェックされることに注意してください。実行中のセッションでユーザーに配信するメッセージを追加する方法ではありません。つまり、MySQL メッセージ テーブルに書き込むだけでは、実行中の 2 つのプラットフォームを実際に同期することはできません。カスタムの ejabberd プラグインを作成して、実際にメッセージをルーティングする必要があります。

于 2016-02-03T13:49:48.973 に答える