使用SignalR作为WebRTC的服务层

时间:2012-12-20 23:49:37

标签: signalr webrtc xsockets.net

这是我提出的another question的后续行动,但有更准确的信息。

我有两个基本相同的网页,用于演示WebRTC,一个使用XSockets作为后端信令层,另一个使用SignalR作为后端信令层。

这两个后端基本相同,只是在它们(显然)有不同的方式将数据发送到客户端的点上有所不同。同样,两个客户端上的TypeScript / JavaScript WebRTC代码完全相同,因为我已经抽象出了信令层。

问题是XSockets站点工作一致,而SignalR站点失败(大多数是一致的,但并非完全)。通常在调用peerConnection.setLocalDescription()时失败,但它也可以无声地失败;或者它(有时)甚至可以工作。

您可以在此处看到两个不同的页面:

XSockets网站:http://xsockets.demo.alanta.com/

SignalR网站:http://signalr.demo.alanta.com/

两者的源代码均为https://bitbucket.org/smithkl42/xsockets.webrtcxsockets分支上的XSockets版本和signalr分支上的SignalR版本。

所以我的问题是:有没有人知道为什么使用一个信号层而不是另一个信号层会对WebRTC产生任何影响?例如,一个或另一个发回Unicode字符串而不是ANSI吗?或者我误解了这个问题,真正的区别在于其他地方?

1 个答案:

答案 0 :(得分:2)

想出来。事实证明,SignalR 1.0 RC1中有一个错误,它将字符串中的任何“+”更改为空格。因此,SDP中的行看起来像这样:

a=ice-pwd:qZFVvgfnSso1b8UV1SUDd2+z

变成了这个:

a=ice-pwd:qZFVvgfnSso1b8UV1SUDd2 z

但是因为不是每个SDP在关键线上都有“+”,所以有时它会起作用。一切都解释了。

已向使用SignalR的好人报告了该错误(请参阅https://github.com/SignalR/SignalR/issues/1194),与此同时,围绕相关字符串的简单encodeURIComponent()decodeURIComponent()修复了该错误。