【发布时间】:2021-04-02 05:16:16
【问题描述】:
我目前正在开发一个项目,该项目必须使用 WebSockets 作为向我的客户端传输数据的一种方式。基础设施如下所示。
客户端 --> Web 服务器 --> Microsoft SQL 数据库
我认为最理想的情况是这样的: 客户端打开一个到服务器的套接字。 服务器打开一个到 Microsoft SQL 数据库的套接字。 每当更新数据库(已插入一些数据)时,数据库都会将数据写入套接字。 服务器将数据写回客户端。 不过,这可能有点乏味,也许我可以以某种方式直接从客户端打开一个到数据库的套接字?
我想知道是否有办法在 MSSQL 数据库更新时自动将套接字通知给 Web 服务器,以便它可以处理该信息。
主要问题是真的;我将如何进行这项工作?我研究了一些使用 WebSockets 的项目,比如 Node.JS 和 Socket.IO,还有 Tornado。虽然我还没有找到任何关于在哪里寻找这个特定功能的线索。我为 NodeJS 的 MSSQL 数据库找到了一些相当不稳定的驱动程序,但不明白是否有任何方法可以创建一个到 DB 的套接字并在数据被泵入数据库时立即通过套接字发送数据。
我也意识到,在客户端和数据库之间建立一个套接字,至少可以说是安全的,因为现在这不是问题,而且 SQL 不是实时应用程序的方式,但我是现在绑定到它:)
编辑 1:
感谢@tomfanning,我现在知道了解决此问题的方法,但严重怀疑性能的改进。让我为你描绘一下情况。如果我会在 MSSQL 数据库上使用触发器,我想会发生这种情况。
情况1
- 数据库更新
- 扣动扳机
- CLR 脚本与 Web 服务器建立连接。要么通过 每个触发器或通过它必须打开和关闭的套接字 涉及打开和关闭标头的 HTTP(S) 请求(其中 是无用的开销)
- Web 服务器接收到触发器并将数据发送到 客户。
- 客户端更新。
现在想象同样的场景,但使用 AJAX
情况2:
- 客户端为 AJAX 请求设置了 1000 毫秒的超时时间
- 客户端超时并发出 AJAX 请求
- 数据库执行一些查询并回发结果
- 客户端更新。
在情况 1 中,您需要一个请求和一个套接字发送/接收,而在情况 2 中,您只需要一个请求。如果我将 AJAX 请求的超时设置为 10 毫秒,用户会不会觉得它是一个像 websocket 这样的实时应用程序?还是情况 1 会更有效,我只是在夸大其词?
提前致谢!
【问题讨论】:
-
如果您可以通过 websockets 以不安全的方式访问您的数据库,我也可以。如果我可以访问您的数据库,我会为 lulz 拖钓它。安全不是开玩笑。
-
@Raynos 我知道安全性不是玩笑,我一定会考虑到它。但我现在只需要知道是否有办法做到这一点。
标签: database sockets node.js websocket socket.io