我目前正在一个项目中,该项目必须使用WebSockets作为将数据传输到客户端的一种方式。基础结构看起来像这样。
客户端-> Web服务器-> Microsoft SQL数据库
我认为最理想的情况是这样的:
客户端打开服务器的套接字。
服务器打开到Microsoft SQL数据库的套接字。
每当更新数据库(已插入一些数据)时,DB就会将数据写入套接字。
服务器将数据写回到客户端。
但是,这可能有点乏味,也许我可以通过某种方式直接从客户端打开数据库的套接字?
我想知道是否有一种方法可以在MSSQL数据库更新时自动将套接字通知Web服务器,以便它可以处理该信息。
主要的问题确实是;我将如何进行这项工作?我研究了一些可与WebSocket一起使用的项目,例如Node.JS和Socket.IO,也包括Tornado。尽管我没有找到有关在何处查找此特定功能的任何线索。我发现NodeJS的MSSQL数据库有一些相当不稳定的驱动程序,但不知道是否有任何方法可以将套接字插入数据库,并在将套接字插入数据库时立即通过套接字发送数据。
我还意识到,至少在安全性方面讲,在客户端和数据库之间建立套接字并不明智,因为现在这已不是问题,并且SQL并非实时应用程序的必经之路,但我受此束缚。目前 :)
编辑1:
感谢@tomfanning,我现在知道了该问题的解决方案,但严重怀疑性能的提高。让我为您描述情况。如果我要在MSSQL数据库上使用触发器,那么我可以想象会发生这种情况。
情况1
每个触发器或通过它必须打开和关闭的套接字
一个HTTP(S)请求,其中涉及打开和关闭 header (
是无用的开销)
客户。
现在想象同样的情况,但是使用AJAX
情况2:
在情况1中,您既需要一个请求,又需要一个套接字发射/接收;在情况2中,您只需要一个请求。如果我将AJAX请求的超时设置为10MS,那么它对用户来说好像是像websocket这样的实时应用程序吗?还是情况1会更有效,而我只是在夸大其词?
提前致谢!
最佳答案
可能的解决方案可能是带有T-SQL triggers on INSERT or UPDATE的CLR procedure,它会向您的主应用程序发送一些通知,然后该通知会通过websockets将数据泵出到您的客户端。将避免需要轮询数据库。
根据您的评论-不确定AJAX在这种情况下将如何为您提供具体帮助-因为作为一种受客户端(浏览器)驱动的技术,您的解决方案将再次是轮询,据我所知,您想避免这种情况。 WebSockets听起来很合适,因为它使您能够从服务器到客户端进行真正的“推送”而无需轮询。
显然,我在这里用非常笼统和理论性的术语谈论。
关于database - 用于Microsoft SQL数据库的WebSocket监听器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8566910/