如何设计数据库监控应用程序

时间:2014-12-05 07:44:49

标签: asp.net web-services asp.net-web-api distributed iocp

我正在设计一个数据库监控应用程序。基本上,数据库将托管在云中,并且将通过用于Windows,iOS,Android等的自定义编写客户端提供对其的记录级访问。基本方案可以通过Web服务(ASP.NET WebAPI)实现。例如,客户端将向Web服务发出GET请求以获取条目。但是,其中一个要求是客户端应该自动刷新UI,以防其他用户(使用客户端的不同实例)更新相同的记录,并且需要在更新的第二个记录下进行自动刷新 - 以便信息始终是最新的。

轮询可能是一种选择,但活跃的客户端数量可能达到数十万,因此我正在寻找更强大,更轻便(在服务器上)的解决方案。我精通.NET和C ++ / Windows,我可以使用IO完成端口在C ++ / Windows中推出一个完整的解决方案,但感觉这样做太过分了,需要太多的开发时间。查看ASP.NET WebAPI但无法发送通知是其局限性。 Windows生态系统中是否有任何框架/技术可以解决这种情况并且可以轻松扩展? Windows生态系统之外的任何好选择的node.js?

2 个答案:

答案 0 :(得分:1)

您没有指定可以使用的数据库,因此如果您能够使用MSSQL Server,则可能需要查找SQL依赖项功能。如果配置和使用正确,如果数据库中有任何更改,将通知您。

将它与SignalR或您选择的任何实时前端框架配对,您将获得所描述的实时更新。

但有一个问题是,SQL Dependency只会告诉你某些事情发生了变化。无论是什么,您都有责任追踪它是哪条记录。这增加了额外的难度,但比民意要好得多。

您可能希望在此处搜索sqldependency标记,以便从此处转到您希望应用的位置。

答案 1 :(得分:1)

我的第一个想法是让网络服务电话“#34;保持活力”#34;或称为WebSockets的html5协议。你可以保持很多连接,但数十万似乎太大了。因此,Web服务需要有一种方法来通过无状态连接来联系客户端。因此,在Web服务器服务器可以与之通信的客户端中构建Web服务。由于防火墙问题,这可能是一个问题。

如果防火墙不是问题,那么您可能不需要客户端中的Web服务。您可以在客户端上实现服务器套接字。

对于移动客户端,如果无法实现服务器套接字,则使用推送通知。或许可以查看https://stackoverflow.com/a/6676586/4350148类似的问题。

最后,您可能需要考虑内容分发网络。

最后一点是希望您不需要在1秒内联系所有100000个用户。我假设有这么多用户你有很多服务器。

关于打开websocket连接的最大数量,请查看Maximum concurrent Socket.IO connections;

还要考虑您对100000个并发用户的估计是否准确。