Tôi hiện đang làm việc trên một dự án có sử dụng WebSockets làm cách chuyển dữ liệu cho khách hàng của tôi. Cơ sở hạ tầng trông như thế này.
Khách hàng -> Máy chủ web -> Cơ sở dữ liệu Microsoft SQLTrình nghe WebSocket cho Cơ sở dữ liệu Microsoft SQL
Tôi nghĩ rằng tình huống lý tưởng nhất sẽ như sau: Khách hàng sẽ mở ổ cắm cho Máy chủ. Máy chủ sẽ mở một ổ cắm vào Cơ sở dữ liệu Microsoft SQL. Bất cứ khi nào cơ sở dữ liệu được cập nhật (một số dữ liệu đã được chèn vào), DB ghi dữ liệu vào socket. Máy chủ ghi dữ liệu trở lại máy khách. Điều này có thể là một chút tẻ nhạt mặc dù, có lẽ tôi bằng cách nào đó có thể mở một ổ cắm cho DB từ khách hàng trực tiếp?
Tôi muốn biết nếu có cách tự động thông báo cho socket đến máy chủ web nếu cơ sở dữ liệu MSSQL được cập nhật, để nó có thể xử lý thông tin đó.
Câu hỏi chính là thực sự; Tôi sẽ làm công việc này như thế nào? Tôi đã xem xét một số dự án làm việc với WebSockets như Node.JS và Socket.IO, cũng là Tornado. Mặc dù tôi đã không tìm thấy bất kỳ manh mối nào về nơi để tìm kiếm tính năng cụ thể này. Tôi đã tìm thấy một số trình điều khiển khá không ổn định cho cơ sở dữ liệu MSSQL cho NodeJS nhưng không hiểu nếu có bất kỳ cách nào để tạo một socket cho DB và ngay lập tức gửi dữ liệu thông qua socket khi nó được bơm vào cơ sở dữ liệu. Tôi cũng nhận ra rằng việc tạo một ổ cắm giữa máy khách và db sẽ không thông minh khi nói rằng bảo mật ít nhất, vì bây giờ đó không phải là vấn đề, và SQL không phải là cách để đi cho các ứng dụng thời gian thực nhưng tôi ' m ràng buộc để nó cho bây giờ :)
Sửa 1:
Nhờ @tomfanning bây giờ tôi biết về một giải pháp cho vấn đề này nhưng nghi ngờ nghiêm trọng đến sự cải thiện trong hoạt động. Hãy để tôi hình dung tình hình cho bạn. Trong trường hợp tôi sẽ sử dụng Trigger trên cơ sở dữ liệu MSSQL, tôi tưởng tượng điều này xảy ra.
Tình hình 1
- Cơ sở dữ liệu được cập nhật
- Trigger được kéo
- Kịch bản CLR tạo ra một kết nối tới máy chủ Web. Hoặc thông qua một ổ cắm mà nó có để mở và đóng cho mỗi kích hoạt hoặc thông qua một yêu cầu HTTP (S) trong đó bao gồm việc mở và đóng cửa một Header (mà là overhead vô dụng)
- Web Server nhận được kích hoạt và phát ra dữ liệu cho ứng dụng .
- Bản cập nhật của khách hàng.
Và bây giờ giả sử tình huống tương tự, nhưng sau đó với AJAX
Trường hợp 2:
- Đã hết thời gian của 1000ms được thiết lập trong ứng dụng cho AJAX yêu cầu
- Thời gian của khách hàng và yêu cầu AJAX
- Cơ sở dữ liệu thực hiện một số truy vấn và đăng lại kết quả
- Bản cập nhật của khách hàng.
Trong trường hợp 1 bạn cần cả yêu cầu và ổ cắm/nhận và trong trường hợp 2, bạn chỉ cần một yêu cầu. Nếu tôi đã thiết lập thời gian chờ của yêu cầu AJAX đến 10MS nó sẽ xuất hiện cho người dùng như thể nó là một ứng dụng thời gian thực như một websocket? Hay tình huống 1 vẫn hiệu quả hơn và tôi chỉ phóng đại?
Cảm ơn trước!
Nếu bạn có thể truy cập db của mình qua websockets theo cách không an toàn, tôi cũng có thể. Nếu tôi có thể truy cập db của bạn, tôi sẽ troll nó cho lulz. An ninh không phải là một trò đùa. – Raynos
@Raynos Tôi biết bảo mật không phải là một trò đùa và tôi chắc chắn sẽ xem xét nó. Nhưng tôi chỉ cần biết liệu có cách nào để làm điều này bây giờ không. –