バグを説明する
何らかの理由で「UserAgent.stop()」関数を使用すると、適切なpromiseで応答するまで、すべてを停止するのに約30秒かかります。
私が達成しようとしているのは、完全な登録解除コマンドです。このコマンドでは、登録を解除するだけでなく、次のことも行います。
私が理解していることから、「stop()」関数はまさにそれを実行します。 時間がかかりすぎるだけです。
ログ
コンソールからのログは次のとおりです。logs
観察された行動
約32秒後にのみ、15:14:05.797で確認できます。
次のログ:
sip.subscribe-dialog | Timer N expired for SUBSCRIBE dialog. Timed out waiting for NOTIFY.
上記のログの後でのみ、発行者とトランスポート(WS)レベルを破棄します。
タイマーが切れたというSUBSCRIBEメッセージの結果として発生する可能性があると私は思いますが、完全にはわかりません。
環境情報
コードで確認しました...
@ john-e-riordanこれは操作の順序の問題のようです。
user-agent.stop()
の先頭で、 Stopped
状態に移行します。
次に、 registerers
、 sessions
、 subscriptions
順に循環します。
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
と呼んでいます。
ちなみに、 dispose
とunsubscribe
の違いは何ですか? dispose
はPBXのサブスクリプションを解除しないと思います。 右? もしそうなら、あまりお勧めできないと思います。私の場合、完全に退会しないと、PBXは無関係なNOTIFYメッセージをKamailioに送信し続けます(KamailioがPBXをブロックすると、完全にブロックされる可能性があります)彼に過負荷をかける)。
これを回避するには、ユーザーエージェントで
stop()
を呼び出す前に、サブスクリプションを手動で破棄でき
進歩はありますか😊? バグが修正される前にこれを行う方法は?
サブスクリプションはありませんが、 UA.stop()
も非常に遅いです。 ほぼ1分...
ありがとうございました。
これを回避するには、ユーザーエージェントで
stop()
を呼び出す前に、サブスクリプションを手動で破棄でき進歩はありますか😊? バグが修正される前にこれを行う方法は?
サブスクリプションはありませんが、
UA.stop()
も非常に遅いです。 ほぼ1分...ありがとうございました。
いいえ、この問題はまだ解決されていません。
しかし、あなたは私がしたことをすることができます...あなたは次の論理的な順序であなたのオブジェクトを一つずつ手動で破壊することができます:
できれば、約束を持ってすべての行動をとってください。 つまり、 then
使用して、各アクションの約束が戻ってくるのを待ち、それに応じて行動して次のステップを実行できるようにします。
同じ問題があります。 サブスクリプションはありません。 私にとって、WebSocketを閉じるのに時間がかかりすぎる(20〜50秒)
私は試した:
userAgent.transport.ws.close()
を使用してWebSocketを手動で閉じて、問題がWebSocketに関連しているかどうかを確認します。特定の構成はありません。SIP.jsガイドに従って再現してください。 これが私の問題に役立つのか、それとも関連するのかはわかりませんが、ライブラリなしでsipプロトコルを使用してWebSocketを開こうとし、閉じました。 それらは両方とも1秒未満続きました。
最も参考になるコメント
同じ問題があります。 サブスクリプションはありません。 私にとって、WebSocketを閉じるのに時間がかかりすぎる(20〜50秒)
私は試した:
userAgent.transport.ws.close()
を使用してWebSocketを手動で閉じて、問題がWebSocketに関連しているかどうかを確認します。特定の構成はありません。SIP.jsガイドに従って再現してください。 これが私の問題に役立つのか、それとも関連するのかはわかりませんが、ライブラリなしでsipプロトコルを使用してWebSocketを開こうとし、閉じました。 それらは両方とも1秒未満続きました。