从Freeswitch 1.2.9 (1.2.9+git~20130506T233047Z~7c88f35451) 升级到Freeswitch 1.4.21 (1.4.21-35~64bit) 后,freeswitch 挂断后停止掉线,当我们尝试执行手动 uuid_kill
,它给了我们这个可爱的错误:
-ERR No such channel!
即使显示 channel 清楚地显示该 channel 。从jira.freeswitch.com上看到的bug来看,好像是代码的问题。关于我们的环境/代码的更多信息:
我们有一个连接到客户端的 python 扭曲循环,因此客户端可以在服务器上运行命令,反之亦然。一旦那个扭曲的连接终止(客户端关闭/断开连接), channel 也会被终止,但我们需要 channel 在此之前终止,因为我们每秒进行大量调用并且需要它们在另一个时终止端断开。我们不能在每次通话结束时关闭并重新打开客户端,或者重新连接,因为那样会花费太多时间,并且会破坏我们使用该软件的目的。
再一次,当我们改用 apt-get 而不是直接从源代码安装 freeswitch 服务器时,这个错误才开始发生。这使我们能够以极快的速度启动和运行新服务器,并且我们宁愿不花额外的时间来使用我们以前的方法。请告诉我您是否有任何想要查看的代码,并询问您需要的任何说明,但我们真的希望尽快修复此问题。提前致谢!
编辑:为进一步说明,我们主要使用 mod_callcenter
、mod_conference
和 mod_sofia
与我们的软件。
编辑 2:为了更清楚一点,我们在 Ubuntu 14.04 服务器上运行它
我们正在使用 ESL 连接从 python 连接和运行 freeswitch 中的命令,我们认为这是问题的根源。我们尝试退出连接,但这会破坏两个 channel 。
此外,Jira 上已针对此问题提交的所有错误都已关闭,因为它们不是错误。我想我在这里可能会更成功一些,因为这是一个编程类型的问题。
最佳答案
您需要在测试环境中重现问题并将错误报告提交给 Jira。充其量你也应该尝试用最新的 master 分支重现它(只支持 Debian 8): https://freeswitch.org/confluence/display/FREESWITCH/Debian+8+Jessie
我在使用 mod_perl 时遇到了类似的问题,一个 Perl 对象引用了一个 session ,但它没有被正确销毁(如果我没记错的话,我有两个 Perl 对象附加到同一个 session )。这导致无法关闭的 channel 。
我想您在您的应用程序和 FreeSWITCH 之间使用了 ESL 连接,对吗?
关于python - 如何摆脱无法杀死的 Freeswitch channel ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32320263/