我目前正在使用WebSocket作爲向客戶端傳輸數據的一種方法。基礎設施看起來像這樣。
客戶端 - > Web服務器 - > Microsoft SQL數據庫Microsoft SQL數據庫的WebSocket偵聽器
我認爲最理想的情況是這樣的: 客戶端打開一個套接字服務器。 服務器打開Microsoft SQL數據庫的套接字。 每當數據庫更新(某些數據已插入)時,數據庫將數據寫入套接字。 服務器將數據寫回客戶端。 雖然這可能有點乏味,也許我可以以某種方式直接從客戶端打開數據庫的套接字?
我想知道是否有辦法自動通知套接字到Web服務器如果MSSQL數據庫更新,以便它可以處理該信息。
主要問題是真的;我將如何做這項工作?我研究過一些與WebSocket一起工作的項目,如Node.JS和Socket.IO,也是Tornado。儘管我還沒有找到任何有關在哪裏尋找這個特定功能的線索。我發現了一些針對NodeJS的MSSQL數據庫的相當不穩定的驅動程序,但不明白是否有任何方法可以向數據庫創建套接字,並在將數據泵入數據庫時立即通過套接字發送數據。我也認識到,在客戶端和數據庫之間建立一個套接字並不聰明,至少說安全性是明智的,因爲現在這不是問題,並且SQL不是實時應用程序的方式,米綁定到它現在:)
編輯1:
感謝@tomfanning我現在知道了解決這個問題的,但是嚴重懷疑在性能上的提升。讓我爲你描繪情況。在我使用MSSQL數據庫上的觸發器的情況下,我想象會發生這種情況。
情況1
- 數據庫中獲取更新
- 扣動扳機
- 的CLR腳本使得對Web服務器的連接。無論是通過 由它來打開套接字和關閉每一個觸發器或通過 涉及打開和關閉頭(其 是無用的開銷)
- Web服務器接收到觸發和HTTP(S)請求將數據發送到客戶端 。
- 客戶端更新。
現在想象同樣的場景,但然後用AJAX
情況2:
- 1000毫秒的超時是在客戶端AJAX設置請求
- 客戶端超時併發出AJAX請求
- 數據庫執行一些查詢並回傳結果
- 客戶端更新。
在情況1你需要一個請求和一個套接字發送/接收,在情況2你只需要一個請求。如果我將AJAX請求的超時設置爲10MS,那麼它對用戶來說就好像它是一個像websocket一樣的實時應用程序?或者情況1仍然更有效率,我只是誇大了?
在此先感謝!
如果你可以通過websockets以不安全的方式訪問你的數據庫,我也可以。如果我可以訪問你的數據庫,我會把它扔給盧爾茲。安全不是一個笑話。 – Raynos
@Raynos我知道安全不是一個玩笑,我一定會考慮它。但我現在只需知道是否有辦法做到這一點。 –