Sip.js: UserAgent.stop()関数に時間がかかりすぎる

作成日 2020年10月06日  ·  7コメント  ·  ソース: onsip/SIP.js

バグを説明する
何らかの理由で「UserAgent.stop()」関数を使用すると、適切なpromiseで応答するまで、すべてを停止するのに約30秒かかります。

私が達成しようとしているのは、完全な登録解除コマンドです。このコマンドでは、登録を解除するだけでなく、次のことも行います。

  1. すべてのSIPサブスクリプションをクリアします。
  2. Webソケット接続を閉じます。

私が理解していることから、「stop()」関数はまさにそれを実行します。 時間がかかりすぎるだけです。

ログ
コンソールからのログは次のとおりです。logs

観察された行動
約32秒後にのみ、15:14:05.797で確認できます。
次のログ:
sip.subscribe-dialog | Timer N expired for SUBSCRIBE dialog. Timed out waiting for NOTIFY.
上記のログの後でのみ、発行者とトランスポート(WS)レベルを破棄します。
タイマーが切れたというSUBSCRIBEメッセージの結果として発生する可能性があると私は思いますが、完全にはわかりません。

環境情報

  • Kamailio 5.3.5(Webソケット)
  • グーグルクローム85.0.4183.121

    • SIP.JS 0.17.1

bug

最も参考になるコメント

同じ問題があります。 サブスクリプションはありません。 私にとって、WebSocketを閉じるのに時間がかかりすぎる(20〜50秒)

私は試した:

  • @slavikbialikが示唆するように、オブジェクトを手動で破棄します。
  • userAgent.transport.ws.close()を使用してWebSocketを手動で閉じて、問題がWebSocketに関連しているかどうかを確認します。
  • ChromeとFirefoxで。

特定の構成はありません。SIP.jsガイドに従って再現してください。 これが私の問題に役立つのか、それとも関連するのかはわかりませんが、ライブラリなしでsipプロトコルを使用してWebSocketを開こうとし、閉じました。 それらは両方とも1秒未満続きました。

wss

全てのコメント7件

コードで確認しました...

@ john-e-riordanこれは操作の順序の問題のようです。

user-agent.stop()の先頭で、 Stopped状態に移行します。

次に、 registererssessionssubscriptions順に循環します。

subscription.dispose()関数は、 Expires=0ヘッダー付きのSUBSCRIBEを正しく送信します。 これにより、 NOTIFYがSIP.jsに送信され、サブスクリプションが終了したことが示されます。 ただし、 user-agentが停止しているかどうかをチェックするチェックインuser-agent.onTransportMessage()があります。 そして、ユーザーエージェントの状態のためにNOTIFY削除します。 サブスクライバーにタイムアウトを待機させます。

これにパッチを適用する作業を行います。 ありがとう。

そのサブスクリプションのケータリングは終了しました。 ただし、 user-agentが停止しているかどうかをチェックするチェックインuser-agent.onTransportMessage()があります。 そして、 `NOTIFYを削除します

迅速に対応し、問題の根本原因を見つけていただき、ありがとうございます。 それがすぐに修正されることを願っています:)
ちなみに、REGISTERを作成するときにも実行している最初のSIP SUBSCRIBEを実行していないときに、 stop()関数をテストしましたが、すべてが高速に動作しています。 しかしもちろん、私はこの購読が必要になります。
もう一度ありがとう!

これを回避するには、ユーザーエージェントでstop()を呼び出す前に、サブスクリプションを手動で破棄できます。

これを回避するには、ユーザーエージェントでstop()を呼び出す前に、サブスクリプションを手動で破棄できます。

ありがとう! すでに完了していますが、効率的な方法ではないと思います。 あなたが私にもっと良い方法を提案することができればそれは非常に役に立ちます。
ユーザーの登録中にいくつかのサブスクリプションを作成しています(プレゼンス、会議、その他のイベントなど)。
すべてのアクティブなサブスクリプションを繰り返して、 disposeまたはunsubscribeメソッドを呼び出す方法はありますか?
userAgentObject._subscriptionsを実行すると、サブスクリプションリストを取得できることがわかりました。これにより、サブスクライバーの配列が取得されます。何らかの理由で、それを取得して、反復などの処理を行うことができません。

現在のやり方ですが、やはり気に入らないのですが、サブスクライブイベントの種類ごとに、サブスクライバーをクラス内の異なるグローバル変数に格納し、サブスクライバー変数ごとにunsubscribeと呼んでいます。

ちなみに、 disposeunsubscribeの違いは何ですか? disposeはPBXのサブスクリプションを解除しないと思います。 右? もしそうなら、あまりお勧めできないと思います。私の場合、完全に退会しないと、PBXは無関係なNOTIFYメッセージをKamailioに送信し続けます(KamailioがPBXをブロックすると、完全にブロックされる可能性があります)彼に過負荷をかける)。

これを回避するには、ユーザーエージェントでstop()を呼び出す前に、サブスクリプションを手動で破棄でき

進歩はありますか😊? バグが修正される前にこれを行う方法は?

サブスクリプションはありませんが、 UA.stop()も非常に遅いです。 ほぼ1分...

ありがとうございました。

これを回避するには、ユーザーエージェントでstop()を呼び出す前に、サブスクリプションを手動で破棄でき

進歩はありますか😊? バグが修正される前にこれを行う方法は?

サブスクリプションはありませんが、 UA.stop()も非常に遅いです。 ほぼ1分...

ありがとうございました。

いいえ、この問題はまだ解決されていません。
しかし、あなたは私がしたことをすることができます...あなたは次の論理的な順序であなたのオブジェクトを一つずつ手動で破壊することができます:

  1. subscriberObj.unsubscribe();
  2. registerer.unregister();
  3. userAgent.transport.disconnect();
  4. userAgent.stop();

できれば、約束を持ってすべての行動をとってください。 つまり、 then使用して、各アクションの約束が戻ってくるのを待ち、それに応じて行動して次のステップを実行できるようにします。

同じ問題があります。 サブスクリプションはありません。 私にとって、WebSocketを閉じるのに時間がかかりすぎる(20〜50秒)

私は試した:

  • @slavikbialikが示唆するように、オブジェクトを手動で破棄します。
  • userAgent.transport.ws.close()を使用してWebSocketを手動で閉じて、問題がWebSocketに関連しているかどうかを確認します。
  • ChromeとFirefoxで。

特定の構成はありません。SIP.jsガイドに従って再現してください。 これが私の問題に役立つのか、それとも関連するのかはわかりませんが、ライブラリなしでsipプロトコルを使用してWebSocketを開こうとし、閉じました。 それらは両方とも1秒未満続きました。

wss

このページは役に立ちましたか?
0 / 5 - 0 評価