Microsoft SQL数据库的WebSocket侦听器

Rub*_*oms 5 database sockets websocket node.js socket.io

我目前正在开发一个项目,该项目必须使用WebSockets作为向我的客户端传输数据的方式.基础设施看起来像这样.
客户端 - > Web服务器 - > Microsoft SQL数据库

我认为最理想的情况是这样的:客户端打开服务器的套接字.服务器打开Microsoft SQL数据库的套接字.每当更新数据库(插入一些数据)时,DB都会将数据写入套接字.服务器将数据写回客户端.这可能有点单调乏味,也许我可以以某种方式直接从客户端打开到数据库的套接字?

我想知道如果MSSQL数据库更新,是否有办法自动通知套接字到Web服务器,以便它可以处理该信息.

主要问题是真的; 我将如何做这项工作?我已经研究过一些与WebSockets一起工作的项目,比如Node.JS和Socket.IO,还有Tornado.虽然我没有找到任何关于在哪里寻找这个特定功能的线索.我已经为NodeJS的MSSQL数据库找到了一些相当不稳定的驱动程序,但是不知道是否有任何方法可以向数据库建立套接字并在数据库被泵入数据库时​​立即通过套接字发送数据.

我也意识到在客户端和数据库之间建立一个套接字并不聪明,说安全性最低,因为现在这不是问题,并且SQL不是实时应用程序的方法,但我必须遵守它目前 :)

编辑1:

感谢@tomfanning我现在知道这个问题的解决方案,但严重怀疑性能的提高.让我为你描绘一下情况.如果我在MSSQL数据库上使用Trigger,我想象这会发生.

情况1

  1. 数据库得到更新
  2. 触发器被拉动
  3. CLR脚本建立与Web服务器的连接.通过一个套接字,它必须为每个触发器打开和关闭,或者通过HTTP(S)请求,包括打开和关闭一个Header(这是无用的开销)
  4. Web服务器接收触发器并将数据发送到客户端.
  5. 客户端更新.

现在想象相同的场景,然后用AJAX

情况2:

  1. 在客户端中为AJAX请求设置了1000ms的超时
  2. 客户端时间输出并发出AJAX请求
  3. 数据库执行一些查询并回发结果
  4. 客户端更新.

在情境1中,您需要请求和套接字发出/接收,在情况2中,您只需要一个请求.如果我要将AJAX请求的超时设置为10MS,那么用户看起来好像它是像websocket这样的实时应用程序?或者情况1仍然会更有效率,我只是夸大其词?

提前致谢!

tom*_*ing 4

可能的解决方案可能是使用CLR过程在 INSERT 或 UPDATE 上使用T-SQL 触发器,该过程向主应用程序发送一些通知,然后主应用程序通过 Websocket 将数据泵出到客户端。将避免需要轮询数据库。

根据您的评论 - 不确定 AJAX 在这种情况下将如何帮助您 - 因为作为一种由客户端(浏览器)驱动的技术,您的解决方案将再次进行轮询,我知道您希望避免这种情况。WebSockets 听起来很适合这里,因为它使您能够在不需要轮询的情况下从服务器到客户端进行真正的“推送”。

显然,我在这里谈论的是非常一般性和理论性的术语。