2

iOSアプリを作成していますが、すべてのクライアントに問題があります。iChat、Messages、Psiなど。すべてのクライアントに存在するため、サーバーの問題であると想定します。

誰かがこのようなことを経験したことがありますか?もしそうなら、あなたはそれを修正するために何をしましたか?それはばかげた設定か何かだと確信していますが、私はこれを理解することができません。これは、ejabberd.logで関連しているように見える唯一のものです。

=ERROR REPORT==== 2012-09-05 12:07:12 ===
Mnesia(ejabberd@localhost): ** WARNING ** Mnesia is overloaded: {dump_log,
                                                             time_threshold}

ヒント/ポインタを事前に感謝します。

4

3 に答える 3

2

上記の警告は(おそらく)あなたが直面している問題とは関係ありません。これらの記憶喪失 イベントは通常、トランザクションログをダンプする必要があるが、前のトランザクションログのダンプがまだ終了していない場合に発生します。

{log_level, 5}直面している問題は、内部で設定できるデバッグが必要ですejabberd.cfg。これにより、ejabberdのデバッグログが有効になります。次に、ログを調べて、これが発生している理由についての推測を見つけます。また、戻ってきてログファイルの詳細をここに貼り付けてください。おそらく私たちはさらにあなたを助けることができるでしょう。私はejabberdでそのような無意味な問題に直面したことはありません。

ログファイルの添付後の更新:

ジョーが以下に書いたように、これは確かにリソースの競合のために起こっています。2つのクライアントが同じリソース値でログインしようとしています。しかし、理想的な世界では、これは問題ではありません。Jabberサーバーは、クライアントによって要求されたリソース値の上にカスタム値を追加または追加することによってこれを処理する必要があります。

たとえば、gtalk(Facebookチャットでも)サーバーが行うことは次のとおりです。

SENT <iq xmlns="jabber:client" type="set" id="1"><bind xmlns="urn:ietf:params:xml:ns:xmpp-bind"><resource>jaxl#resource</resource></bind></iq>
RCVD <iq id="1" type="result"><bind xmlns="urn:ietf:params:xml:ns:xmpp-bind"><jid>jabberxmpplibrary@gmail.com/jaxl#resou27F46704</jid></bind></iq>

ご覧のとおり、クライアントがリソース値でバインドするように要求しましjaxl#resourceたが、gtalkサーバーは実際にセッションをリソース値でバインドしjaxl#resou27F46704ました。つまり、これはクライアントのバグではなく、ejabberdのバグです。

これを修正するには、次の2つのことができます。

  1. リソース値は、おそらくクライアント構成のどこかにハードコーディングされています。単にそれを削除します。優れたクライアントは、最後にランダムなリソース値を生成することで、これを自動的に処理します。
  2. ejabberdにパッチを適用して、gtalkサーバーの動作を実行します(上記のとおり)。これは、ejabberd_c2s.erl src内の関連セクションであり、微調整が必​​要です。またReplaced by new connection、c2sソースファイル内を検索すると、何が起こっているのかがわかります。
于 2012-09-22T03:16:01.060 に答える
2

https://github.com/processone/ejabberd/blob/master/src/ejabberd_c2s.erl#L936にはすでにパッチが適用されているようです。構成変数はresource_conflictと呼ばれ、必要な値はsetresourceです。

于 2012-09-27T18:41:10.733 に答える
1

これは、クライアントの「リソースの決闘」バグのように聞こえます。クライアントの2つのコピーが同じリソースを使用して同時に実行されており、自動再接続ロジックに障害がある可能性があります。2番目のクライアントがログインすると、最初のクライアントは競合エラーでオフラインで起動されます。最初のクライアントが再度ログインすると、2番目のクライアントで競合エラーが発生します。ループ。

これの証拠は、ログファイルの3480行目にあります。

D(<0.373.0>:ejabberd_c2s:1553) : Send XML on stream = 
  <<"<stream:error><conflict xmlns='urn:ietf:params:xml:ns:xmpp-streams'/>
       <text xml:lang='en' xmlns='urn:ietf:params:xml:ns:xmpp-streams'>
         Replaced by new connection
       </text>
     </stream:error>">>
于 2012-09-22T17:24:58.790 に答える