Obecnie pracuję nad projektem, który musi korzystać z WebSockets jako sposobu przesyłania danych do mojego klienta. Infrastruktura wygląda tak.
Klient -> Serwer WWW -> Microsoft SQL DatabaseModuł nasłuchujący WebSocket dla bazy danych Microsoft SQL
myślę, że najbardziej idealna sytuacja byłaby tak: Klient otwiera gniazdo do serwera. Serwer otwiera gniazdo do bazy danych Microsoft SQL. Ilekroć baza danych jest aktualizowana (niektóre dane zostały włożone), DB zapisuje dane do gniazda. Serwer zapisuje dane z powrotem do klienta. Może to być trochę uciążliwe, może uda mi się jakoś otworzyć gniazdo do bazy danych bezpośrednio od klienta?
Chcę wiedzieć, czy istnieje sposób automatycznego powiadamiania gniazda na serwerze sieciowym, jeśli baza danych MSSQL jest zaktualizowana, aby mógł przetworzyć te informacje.
Główne pytanie jest naprawdę; jak to zrobić? Przyjrzałem się niektórym projektom współpracującym z WebSockets takimi jak Node.JS i Socket.IO, a także Tornado. Chociaż nie znalazłem żadnych wskazówek, gdzie szukać tej konkretnej funkcji. Znalazłem dość niestabilne sterowniki dla baz danych MSSQL dla NodeJS, ale nie rozumiem, czy istnieje jakikolwiek sposób, aby utworzyć gniazdo do bazy danych i natychmiast wysłać dane przez gniazdo, gdy jest ono pompowane do bazy danych.
Rozumiem również, że utworzenie gniazda między klientem a bazą danych nie byłoby zbyt mądrym stwierdzeniem, że jest ono najmniej bezpieczne, ponieważ na razie to nie jest problem, a SQL nie jest rozwiązaniem dla aplikacji działających w czasie rzeczywistym, ale " m związany z nim do teraz :)
edycję 1:
Dzięki @tomfanning teraz wiem o rozwiązanie tego problemu, ale wątpię poprawę wydajności. Pozwól mi sobie wyobrazić sytuację dla ciebie. W przypadku, gdy użyłbym Triggera w bazie danych MSSQL, wyobrażam sobie, że tak się dzieje.
Sytuacja 1
- Baza jest aktualizowana
- Spust jest ciągnięty
- Skrypt CLR nawiązuje połączenie z serwerem WWW. Albo poprzez gniazdko, które musi otwierać i zamykać za każdym spuście lub poprzez HTTP (S) wniosek, który obejmuje otwieranie i zamykanie nagłówka (który jest bezużyteczny overhead)
- Serwer WWW odbiera spust i emituje dane do klienta .
- Klient aktualizuje.
A teraz wyobraź sobie ten sam scenariusz, ale potem z AJAX
Sytuacja 2:
- timeout 1000ms jest ustawiona w kliencie dla AJAX żąda
- Klient traci czas i wysyła żądanie AJAX:
- Baza danych wykonuje zapytanie i odsyła wynik:
- Klient aktualizuje.
W sytuacji 1 potrzebujesz zarówno żądania, jak i gniazda emituj/odbierz, aw sytuacji 2 potrzebujesz tylko jednego żądania. Gdybym miał ustawić limit czasu żądania AJAX na 10MS, to wyglądałby tak, jakby był aplikacją działającą w czasie rzeczywistym, taką jak websocket? A może sytuacja 1 byłaby jeszcze bardziej efektywna i po prostu przesadzam?
Z góry dzięki!
Jeśli możesz uzyskać dostęp do bazy danych za pośrednictwem stron internetowych w niezabezpieczony sposób, mogę również. Jeśli mogę uzyskać dostęp do bazy danych, będę ją trollować dla lulza. Bezpieczeństwo to nie żart. – Raynos
@Raynos Wiem, że bezpieczeństwo to nie żart i na pewno weźmiemy go pod uwagę. Ale muszę po prostu wiedzieć, czy jest na to jakiś sposób. –