描述错误
出于某种原因,当使用“UserAgent.stop()”函数时,它需要大约 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()
功能理所当然发送SUBSCRIBE
用Expires=0
报头。 这会导致NOTIFY
被发送到 SIP.js,表明订阅已关闭。 但是, user-agent.onTransportMessage()
中有一个检查,用于检查user-agent
是否已停止。 然后由于用户代理状态而删除NOTIFY
。 导致订阅者等待超时。
我们将努力修补这个问题。 谢谢。
说明订阅已关闭。 但是,
user-agent.onTransportMessage()
中有一个检查,用于检查user-agent
是否已停止。 然后丢弃`NOTIFY 因为
非常感谢您的快速响应并找到问题的根本原因! 希望它会尽快修复:)
顺便说一句,当我没有进行初始 SIP SUBSCRIBE 时,我测试了stop()
函数,而我在进行注册时也在这样做,并且一切都运行得很快。 但我当然需要这个订阅。
再次感谢!
要解决此问题,您可以在用户代理上调用stop()
之前手动处理您的订阅。
要解决此问题,您可以在用户代理上调用
stop()
之前手动处理您的订阅。
谢谢! 已经完成,但我认为不是有效的方式。 如果您能建议我更好的方法,那将非常有帮助。
我在用户注册时进行了一些订阅(例如出席、会议和其他一些活动)。
有没有办法对所有活动订阅进行迭代并调用dispose
或unsubscribe
方法?
我看到我可以通过执行以下操作来获取订阅列表: userAgentObject._subscriptions
并且它正在获取一些订阅者数组,由于某种原因,我无法接受它并对其进行任何操作,例如迭代或其他操作。
我目前的做法,但同样,我不喜欢它,对于每个订阅事件类型,我将订阅者存储到类中的不同全局变量中,对于每个订阅者变量,我调用unsubscribe
方法。
顺便说一句, dispose
和unsubscribe
之间有什么区别? 我假设dispose
不会取消订阅 PBX 中的订阅。 对? 如果是这样,我认为不建议这样做,因为在我的情况下,如果我不完全取消订阅,PBX 将继续向我的 Kamailio 发送不相关的 NOTIFY 消息(这可能会导致完全阻止,因为 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秒。