Azure 移动服务与将设备作为服务器的 Web 套接字

Posted

技术标签:

【中文标题】Azure 移动服务与将设备作为服务器的 Web 套接字【英文标题】:Azure Mobile Services vs web sockets for device as a server 【发布时间】:2013-07-16 06:07:24 【问题描述】:

我想到了这样一种情况,即 Windows 8 应用程序将充当服务器,接收来自不同客户端(其他 Windows 8 应用程序或 Excel Web 应用程序)的消息。这些消息需要以低延迟(大多数情况下小于 1 秒)到达。 我正在考虑许多不同的解决方案。我肯定需要某种服务器骨干来进行匹配(将消息路由到适当的设备)。我尝试在两者之间做出决定

    Azure 移动服务。源将消息发送到 Azure 和 Azure 会将它们作为推送通知发送到相应的 “服务器”设备。问题是这里的延迟不是很好。

    Azure 移动服务(或简单的 Web API 站点等更简单的东西)仅用于匹配: 将与每个客户端建立实际的消息发送 具有与服务器应用程序的 Web 套接字连接。在这里我们非常 低延迟,但我担心连接问题。事实是 服务器不会存储任何消息更好的数据保护 透视,但使灾难恢复和处理服务器应用程序在后台的时刻变得更加困难。

    Azure 服务总线。它应该是为此而制作的(服务器 订阅客户端消息的提要),但我认为一个新队列将 需要为每个服务器创建(然后客户端必须 了解该队列的名称,因此可以选择一些配对 2个是必要的)

你会推荐什么?

提前致谢!

【问题讨论】:

【参考方案1】:

我之前一直在开发类似的东西,我建议你使用 Windows Azure Mobile 解决方案构建这个解决方案,尤其是它现在支持 Node JS NPM。

http://weblogs.asp.net/scottgu/archive/2013/06/14/windows-azure-major-updates-for-mobile-backend-development.aspx

对于客户端,我还建议您使用 SignalR 构建它,它专为实时应用程序需要来自服务器端的大量事务的情况而设计。

http://www.asp.net/signalr

您还可以在以下链接中找到有关如何集成它们的更多详细信息:http://hhaggan.wordpress.com/2013/07/12/signalr-node-js/

希望这些对你有帮助,如果你还需要什么,请告诉我。

【讨论】:

感谢您的回答。我最感兴趣的是你使用 Azure Mobile 做什么。如果 nodejs 作为服务器,SignalR 作为客户端,Azure Mobile 是否仅限于身份验证、存储和托管? 我也很想知道是什么促使您使用 Node.js 而不是 WebApi 服务器端。 您好,Windows Azure Mobile 服务现在支持在其中添加 NPM,因此除了正常的身份验证、存储和托管之外,它还可以做更多的事情。检查这个博客文章它有一个已经完成的例子。 weblogs.asp.net/scottgu/archive/2013/06/14/… 对于我为什么选择 Node Js 的问题是我渴望更多地了解它。但是我知道在处理大量传入流量时它的性能要好得多。检查此页面它可能会对您有所帮助。 ***.com/questions/6484175/… 对于可以添加到解决方案的模块,请查看以下链接,它是适用于 Node Js 的 Azure SDK github.com/WindowsAzure/azure-sdk-for-node【参考方案2】:

经过深思熟虑,阅读了您的回复(以及 msdn 论坛上的其他回复)并分析了我的场景、查询模式和我更熟悉的技术,我决定如下:

基于 SQL Azure 的统一 Web Api 模型(在一种情况下甚至可能返回 OData IQueryable)将处理消息发送和匹配。

消息转发到 Windows 8 中心应用程序将通过 SignalR 和 Web Sockets 完成。这两个链接向我展示了如何处理应用程序进入后台 (http://msdn.microsoft.com/nl-be/windows/apps/jj662740.aspx) 或失去连接 (http://msdn.microsoft.com/nl-be/windows/apps/jj710180) - 我仍然希望支持失去连接的几分钟,在此期间服务器将累积消息并发送所有这些尚未收到(经过一段时间后,匹配将被视为结束,数据库将被清理 - 我不确定我是否会以编程方式或使用工作线程上的工作流来处理此问题。在这一点上看起来很简单以编程方式处理)。

如果我在匹配过程中需要推送通知,我可以在 Web Api 中实现它们(这比在移动服务中需要更多的工作):http://www.codeproject.com/Articles/506733/Windows-8-Notifications-Push-Notifications-via-Win

所以它更像是解决方案 2。如果我遇到任何并发症,我会及时通知您。我最初可能需要更多代码来通过移动服务进行设置,但我认为一旦按照基本教程设置基础知识,我将能够以更无缝的方式扩展解决方案。我什至可能会尝试使用 Entity Framework 6,以实现全异步并最大限度地减少 node.js 的吞吐量开销(但我并不期待任何严重的负载)。

【讨论】:

以上是关于Azure 移动服务与将设备作为服务器的 Web 套接字的主要内容,如果未能解决你的问题,请参考以下文章

将服务器从 2012 升级到 2019 后,Web Socket 不适用于实际设备

Azure 移动服务 PushNotifications 设备注册

适用于 Android 谷歌云消息 (GCM) 的 Azure 移动服务从不向设备发送通知

Azure 移动服务 Web Api 上的 SignalR CORS

Azure 移动服务(推送通知)

如何使用 websockets 在我的 Azure 应用服务 Web 应用和本地控制台应用之间建立连接?