我必须为 Mobile 构建一个基于 Web 的聊天信使。为此,我希望服务器和客户端之间的通信打开,以便服务器可以在没有客户端请求的情况下推送消息。我发现 SignalR 和 Websockets 适合这个。但我不确定使用哪一个。
2 回答
在后台,SignalR 使用 Web 套接字、长轮询、服务器发送事件或永久帧,根据客户端和浏览器支持的内容,在应用程序中启用实时功能。您应该考虑使用它来避免兼容性问题并获得可用于开发实时应用程序的附加功能。您可以参考以下文档了解更多详细信息:
答案是它真的取决于。这取决于你的规模,我并不是说 SignalR 的规模很差。它是关于在手机上支持 SignalR 客户端库的。
我们使用 signalr 已经有一段时间了,遇到了很多令人头疼的问题,然后又回到了原始的 websockets。
根据我的经验:
1- SignalR 不支持 xamarin 客户端上的 Websocket。(因为它使用 System.Net.WebSockets 中的类型,并且此命名空间在任何 PCL 配置文件中都不可用)并且他们不打算很快添加它(我在 github 上联系了他们)。并且您可能没有其他解决方案,例如(长轮询或永久帧和...消耗的内存是 WebSockets 的 5 倍)。
2-它提供了对实际传输的可悲控制,这将使您在处理打盹模式、屏幕锁定等时在移动设备上遇到大麻烦......。(这些情况有一些解决方法,但它们基本上很脏)。
作为结论,如果您有时间,我认为对于移动设备,可以使用以单声道(根据 James james montemagno 所说)和主要 .net 实现的原始 System.Net.WebSockets。否则,您可以使用已停产的 Microsoft.WebSockets nuget 包。