c# - 套接字、轮询、无套接字结果?

标签 c# winforms sockets azure polling

我正在开发一个 Windows 窗体应用程序,该应用程序在 Microsoft Azure 开发服务托管的云 SQL 服务上运行。如果没有能力物理上拥有一个接收应用程序,这将允许我利用套接字,这是一个重要的陷阱,因为我的应用程序将严重依赖于专用数据库,所以我更希望能够不断检查数据库的更改和根据符合条件的行条目提醒当前用户。

我在一些博客/帖子上读到,轮询(是一种可能的解决方案)是一件不好的事情。那么,应该考虑什么方法呢?

最佳答案

为了澄清问题,您希望客户端在数据库中的某些数据发生更改时接收更新。

SQL Server 2005 和 2008确实支持数据更改时通知客户端的概念 ( MSDN )。然而,this SO问题似乎表明目前SQL azure中不存在此功能。这意味着您有几个选择:

  1. 轮询数据库本身

    • 此选项可让您降低成本,因为您已经拥有所需的一切。当然,缺点是您要以相对频繁的间隔执行(可能很大的)查询。如果有足够的客户端,由于涉及的负载,这将大大减慢速度。如果您有价格/转让方案,也可能会付出高昂的代价。
  2. 围绕数据库包装一个服务并与之对话

    • 这可以与轮询一起使用,但在使用推送技术(如套接字或 WebSocket)时效果更好。这当然会产生额外的前期成本,但允许您控制接收哪些更新以及何时接收更新。理想情况下,该服务将在内存中保留数据库的副本,用于服务客户端请求,同时自行更新实际数据库。这将对数据库的查询(速度很慢)保持在最低限度。

只有你知道正确的答案,但我会选择第二个。当您需要超越简单查询的功能时,它将具有更高的性能、更好的扩展性,并且更具可扩展性。

关于c# - 套接字、轮询、无套接字结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25456898/

相关文章:

c# - 我可以在 Windows Vista 登录屏幕上方或旁边显示表单吗?

c# - 使用 C# 将 Postgres DB 导出到 Excel

c# - 如何在 WinForms 中扩展控件?

c# - 相对于应用程序的光标位置

C# 使用 block 上下文,在另一个使用 block 上下文

c# - WCF 错误 - 无法接收在客户端添加的 MessageHeaders

vb.net - 打开表格时出现异常故障

c - 套接字未收到消息 AF_UNIX

c# - 发送一个填充特殊字符的字节数组

android - 通过蓝牙发送多个文件