2

Strophe.js を使用してカスタム xmpp チャット アプリケーションを作成しています。ブラウザとデスクトップ クライアント (Adium) 間の通信は完全に機能します。ブラウザ経由で Adium にメッセージを送信したり、Adium からブラウザにメッセージを送信したりできます。メッセージは送信されても​​配信されないため、ある時点でブラウザ間の通信に問題が発生します。Google Chromeだけの問題のようです。

興味深いのは、 <presence> スタンザが正常に送信および配信されるという事実です。サーバーデーモンとして ejabberd を使用します。

これは、私が 1 つのアカウントから送信しているプレゼンス スタンザです。

<presence type="away" xmlns="jabber:client">
    <show>away</show>
    <status/>
</presence>

そして私が他に受け取るもの:

<presence xmlns="jabber:client" from="test1@domain.com/3917283126133167196759537" to="test2@domain.com/1563391996133167110798391" type="away">
    <show>away</show>
    <status/>
</presence>

また、私が送信するメッセージスタンザ:

<message from="test1@domain.com/267172122813316722921543" to="test2@domain.com" type="chat" id="4915" xmlns="jabber:client">
    <active xmlns="http://jabber.org/protocol/chatstates" />
    <body>Testing...</body>
</message>

Chromeでは何も受信されません...

編集:問題は、一部の文字のエスケープにありました。Chrome では、セキュリティ上の問題により、エスケープを解除できませんでした。

4

1 に答える 1

1

あなたのtype="away"最初の存在では無効です。利用可能なプレゼンスの 'type' 属性を省略します。type="unavailable"オフラインにするときに設定します。

プレゼンスが無効であるため、対応可能としてマークされず、生の JID 宛てのメッセージを受信しません。

更新:上記の意味についての混乱を解消するために(コメントを参照)...

このスタンザの「type」属性は無効です:

<presence type="away" xmlns="jabber:client">
    <show>away</show>
    <status/>
</presence>

それ以外は問題ありません。クライアントが送信できるプレゼンスには、使用可能と使用不可の 2 種類があります。標準の利用可能なプレゼンスには「タイプ」属性がありません。使用不可の存在がありtype="unavailable"ます。ユーザーの実際のステータス (退席中など) は、「type」属性ではなく、<show/>and要素を介して通知されます。<status/>

上記のスタンザを有効な利用可能なプレゼンスにするには、次を削除するだけですtype="away":

<presence xmlns="jabber:client">
    <show>away</show>
    <status/>
</presence>
于 2012-03-07T14:41:49.140 に答える