- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 Twilio Network Traversal Service作为 native 应用程序的一部分,我是 working on执行对等远程桌面连接。我们实现了 WebRTC 协议(protocol)栈的一个子集,相当于 WebRTC 数据 channel (不是 WebRTC 视频和音频协议(protocol))。使用 TURN 中继时,TURN 分配似乎在 session 开始后几分钟到最多 12 分钟之间随机失效。这个问题看起来很像这个 one ,但建议的解决方法(发送静音音频)在我的情况下是 Not Acceptable ,因为我没有实现 WebRTC 音频/视频协议(protocol)。
在过去的两周里,我一直在关注这个问题,并将这个问题隔离为 Twilio 服务本身。为了进行比较,我使用了基于 web 的 WebRTC 数据 channel 演示,使用 firefox 和 Xirsys TURN server cloud .我有wireshark 捕获显示firefox 与Twilio 断开连接,就像我的 native 应用程序一样,而完全相同的firefox 演示在使用Xirsys 服务器时不会断开连接。
我最初使用的是 Xirsys,但我在他们的服务中遇到了一些不稳定的问题,这让我切换到 Twilio,这就是为什么我宁愿让 Twilio 解决这个问题,而不是回到 Xirsys。至少,我宁愿有两个我可以选择的 WebRTC 托管服务提供商,我知道它们应该可以正常工作。这就是为什么我要花时间详细解释这个问题,以便它可以得到解决。
这是两个使用 WebRTC 数据 channel 和 Twilio TURN 中继服务器显示 firefox 的 wireshark 捕获(过滤掉对等数据消息):
第一次捕获 4 分钟后,第二次捕获约 11 分钟后,流量停止中继。在这两个捕获中,firefox 检测到流量停止中继(在数据 channel 级别)并通过发送生命周期为零的刷新请求数据包尝试正常断开连接。两次正常断开连接都会导致 437 分配不匹配错误,表明服务器甚至不知道 firefox 正在尝试正常关闭的分配。
对于我的 native 应用程序,这通常采用 CreatePermission Request 消息的形式,该消息失败并出现 438“Wrong nonce”错误,这基本上是如果客户端尝试更新不再存在的分配的权限时应该发生的情况。错误代码 438 通常表示“Stale nonce”,这不是真正的错误,而是表明 nonce 已过期并且客户端应使用“error”消息中包含的新 nonce 再次尝试。我花了一段时间才弄清楚,但即使错误代码是438,错误字符串也不相同。我在 Xirsys 中观察到了一个真正的陈旧随机数错误,并使用错误响应中的新随机数成功更新了我的权限,所以我知道我可以在我的实现中正确处理这种情况。
这是我使用的 WebRTC 数据 channel 演示的源代码:
https://github.com/devolutions/webrtc-demo
为了进行比较,这里是使用 Xirsys TURN 服务器云的相同 firefox 数据 channel 演示:
在这个捕获中,我让演示运行了大约 16 分钟(它的工作时间比这长得多,我尝试过的最长时间是两个小时)。我们可以看到,在整个 session 期间,流量一直在中继,并且 Firefox 不断成功发送 CreatePermission 请求。最后,正常断开连接是由 Firefox 关闭 WebRTC 数据 channel 触发的(而不是因为流量不再被中继而被关闭)。与 Twilio 捕获相反,生命周期为零的刷新请求是成功的:Xirsys TURN 服务器仍然知道分配情况并按预期发回成功响应。
应该注意的是,ICMP 不可达错误是正常的,因为我认为在这种情况下,当响应回来时,firefox 不再监听给定的端口。换句话说,它发送生命周期为零的刷新请求,并且不等待答案返回。
目前,我别无选择,只能回到 Xirsys,但我真的很想修复 Twilio 网络穿越服务。如果您对此问题有更多疑问,请告诉我。
我已经上传了wireshark捕获here以供引用。
编辑:我修改了 webrtc 演示页面,这样当冰连接状态设置为“断开连接”时它不会关闭连接。现在,当冰连接状态变为“失败”时,我真正断开了连接。然而,它实际上并没有改变任何东西,因为在这种情况下,状态从“断开连接”到“失败”只需要几秒钟的时间。
由于我有新的相关屏幕截图和截图,我正在更新原始问题以澄清 Philipp Hancke 指出的某些问题:
首先,这里是一个新的捕获与冰连接状态修复(浏览器仅在状态变为“失败”时关闭连接):
有趣的是,这一次, session 持续了整整 18 分钟。这是在星期六早上拍摄的,所以我猜这个问题可能与 twilio 服务器上的当前工作负载有关。然而,它以完全相同的方式失败了,因为它对我来说总是如此。作为奖励,我们甚至有一个由 Firefox 正确处理的有效陈旧随机数响应。
但是,如果我们对同一捕获采取不同的观点,我们可以看到,在 Firefox 认为连接已断开并发送生命周期为零的刷新请求之前,流量停止中继 30 秒。与之前的捕获一样,服务器响应分配不匹配错误,表明它不知道 firefox 正在谈论哪个分配。
发送的最后八个数据包大小相同,所以我猜测它们是重传。重传 30 秒后,很可能 SCTP 认为传输已被丢弃。
关于生命周期为零的刷新请求,我做了一个测试,我很早就从浏览器关闭了连接。在这种情况下,服务器识别分配并返回成功响应:
分配不匹配是最容易观察到的症状,但在我对 native 应用程序的测试中,我看到了类似的错误,包括非零生命周期的刷新请求和 CreatePermission 请求(438“错误的随机数”错误)。但是,由于浏览器在数据未中继 30 秒后关闭连接,因此很难通过当前的 webrtc 演示观察到这些错误。如果我们可以将该超时更改为 10 分钟,我们也会看到这些错误。
最佳答案
很好的问题描述!
如果没有服务器日志,很难确定哪里出了问题。我尝试使用运行最新版本的 coturn 并显示与 Twilio 服务器相同的行为的出现的 TURN 服务器。 Xirsys 似乎正在运行 coturn 的自定义版本(来自软件领域的 Coturn-0.5 'Xirsys Turn Services' 但 coturn 从未有过这样的版本)。
In both captures, firefox detects that traffic stops being relayed (at the data channel level) and attempts a graceful disconnection by sending a Refresh request packet with a lifetime of zero.
关于Twilio WebRTC TURN 中继在几分钟后随机停止工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51793787/
我正在创建一个使用twilio的网络应用程序,但我似乎遇到了问题。 该系统由3个参与者组成: 实际客户 物理服务器 我们的网络应用程序 每当客户通过表单创建新的“作业”时,所有作业详细信息都将以文本形
有a good pitch from Twilio here . 我只是不明白他们如何通过网站做到这一点。如何使用网络浏览器控制固定电话? 最佳答案 简短的回答:神奇的蝴蝶。 更长的答案:Twilio
我一直在与 Twilio 合作 program SMS functionality在我的应用程序上,似乎 Twilio 对美国号码效果最好,而对国际号码效果不佳。我做了一些研究,并了解到 8 月 16
我需要将用户添加为出站调用者 ID。通过使用以下代码 const accountSid = 'ACeae3abf5038c91052c27aa2a04969457'; const authToken
在 Twilio - 飞行模式同时响铃中断。 由于连接的第一个调用将取消所有其他尝试,如果有线路处于飞行模式,它将立即接听并将用户带到语音信箱。 解决方法是仅在调用成功连接而不是 PICKED-UP
我有一个用于发送短信的 twilio 帐户。但是,我需要有关如何通过调用其 API 查看我的帐户电话号码列表的指导。我试图浏览 API 中的不同菜单,但我没有看到任何选项来获取我的帐户电话号码列表。预
我正在尝试使用 Twilio Video,我需要从我的应用服务器获取访问 token (jwt)。 下面是生成访问 token 的 NodeJS 应用服务器代码。在下面的凭证中,API_KEY_SEC
创建 Twilio 功能 token 是否需要向 Twilio 服务器发出请求? 如果我理解正确的话,创建 Twilio 功能 token 涉及某种仅在我自己的服务器上发生的加密过程。当我调用库来创建
我最近一直在阅读 Twilio 文档,对“Twilio Client”和“Twilio Video”感到困惑。 我注意到“Twilio Client”的教程涉及注册电话号码,而测试版“Twilio V
我找不到任何关于在主讲人发生变化时更改构图布局的文档。我想要做的是在视频的更大区域中拥有比非主导演讲者更大的主导演讲者,并且该演讲者可以/将在某个时间间隔发生变化。这可能使用 Compositions
设置 我已经使用两个基于美国的号码(+1 国家代码)成功测试了我的 Twilio 应用程序一段时间。验证 token 已通过 SMS 成功发送,验证检查状态返回“已批准”。生活很好! 😎 问题 今天
有什么方法可以在我的两个用户之间进行通话?我的意思是......我有一个带有注册号码的 twilio 帐户,我必须调用我的客户“Bill”,所以当他回答时,电话应该被重定向到 Bill 选择的另一个客
我想要一个流程,我可以在其中给用户发短信,并且该用户可以发回短信以触发事件。我可以在任何时候向用户发送多条未完成的消息 - 无论如何,在收到短信时,我是否可以弄清楚它正在回复哪条消息,而无需在短信正文
关闭。这个问题需要更多 focused .它目前不接受答案。 想改进这个问题?更新问题,使其仅关注一个问题 editing this post . 去年关闭。 Improve this questio
无论如何,我可以关闭默认的 twilio 哔声以开始录制。我想使用我们自己的客户提示音。 基本上我们希望在 MP3 播放完毕时发出一声哔哔声。之后我们想要 20 秒空白,一旦 20 秒完成,我们会发出
我是 Twilio 的新手,在设计出站拨号器当前预览拨号时遇到了一个问题。如果工作人员拒绝一项任务,则不应再次向该工作人员提供相同的任务。 我如何处理这个案子? 最佳答案 通常,如果工作人员拒绝任务,
我正在使用 Twilio PHP 库,但问题实际上与语言无关。我尝试执行以下操作: $client = new Services_Twilio('MyAccountSID', 'My auth tok
我们已经构建了一个网络应用程序。该应用程序的核心是在网络上安排 session / session 。因此,用户 A( session 协调员)将安排 session / session ,所有其
我正在使用 JavaScript SDK 创建一个 Twilio 应用程序。 我想实现调用保持功能,但我在实现它时遇到了麻烦。 当调用由软电话发起时,保持调用的过程是什么? 还有,软电话接听的过程是怎
三月份,我开设了一个网站,为人们提供用于接收短信验证等的临时号码。 我刚刚登录到该帐户并意识到我收到了大量的出站短信费用。 每当我的任何号码收到短信时,它们似乎都是默认的自动响应。 我没有启用此功能(
我是一名优秀的程序员,十分优秀!