Wpis z mikrobloga

#programowanie #naukaprogramowania #sql #mssql #csharp

Mirki, od wczoraj głowię się nad problemem, jak najwydajniej zrobić "niby chat" w ms sql.
Dokładniej chodzi mi o wysyłanie wiadomości.

Klient A wysyła wiadomość, i teraz jak u klienta wychwycić wysłanie wiadomości mając przy użyciu tylko SQL?
Chcę to zrobić najbardziej optymalnie.

Nad czym myślałem:

1. Wypytywanie bazy danych u każdego klienta co 10sek, i sprawdzanie, czy jego rekord 'messages' w tabeli USERS się zmeinił, jak tak, to znaczy, że stworzony został pokój. Format 'messages' jest nastepujący
na przyklad: "1#6#91#27#21#" -> każde liczba to ID pokoju z rozmową (Chat room). Jeśli się nic nie zmieniło, to sprawdź aktualne pokoje w których jest użytkownik oraz ID ostatniej wiadomości. Jeśli jest różne od aktualnego, to znaczy, ze mamy nowe wiadomosci i wtedy je pobierz.

+ Stworzenie czegos takiego jest proste jak budowa cepa
- Przy 1k klientów raczej mało wydajne

2. SqlDependency, czytałem o tym, jednakże nie potrafię tego ugryźc jak to działa, może jakies rady?

+ na pewno lepsze niz polling sql
- ponoc jak kilka rzeczy na raz sie wysle, to wiadomosc dostajesz tylko o tej ostatniej dodanej

3. Szukałem na internecie jakichś darmowych "Free Notyfication Services", by u klienta który wyśle wiadomość, wysłać też na tą usługę wiadomość, że zostało coś zrobione. i u każdego klienta zrobić uchwyt, jednakże nie znalazłem żadnego darmowego..

+ bez obciazania bazy danych
+ lepsze wydajnosciowo
- nie mam pojecia, chyba najlepsza opcja. Moze ktos otoczyl sie gdzie o cos takiego?

nie chce nic kupywac, po prostu zrobic to jakos za 0 zł i najbardziej optymalnie.

Poradzicie coś? Nie wiem jak to ugryźć ;/
  • 18
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@MroczekBall3D: dlaczego chcesz zrobić tylko przy pomocy SQL? W takich sytuacjach tzn. gdy mówimy o aplikacji real-time mechanizm pull (np. wysłanie zapytanie do API lub bazy i pobranie danych) powinien służyć tylko i wyłącznie jako "fallback". To co powinieś zrobić to push - masz tutaj świetną bibliotekę SignalR (zarówno serwer jak i klient webowy w JS oraz inne paczki), która wypycha dane po web socketach. Wystarczy, że zrobisz tyle iż
  • Odpowiedz
@MroczekBall3D: nie wymaga, hostujesz to np. z poziomu aplikacji ASP.NET. No chyba, że aplikacja do chatu nie ma być w wersji webowej, to wtedy w przypadku apki desktopowej, po prostu ogarnij podstawy komunikacji sieciowej po socketach.
  • Odpowiedz
@lukpep: też patrzyłem nad tym, ale możliwość co patrzałem po API do niego to tylko wysyłanie, a nie pobieranie tych powiadomień xd ;/ // edit, chociaż, patrzłem co innego, podobnego w nazwie, już patrzę.
@spetz: Gdzie jest wspomiane o tej domenie? Bo zrobilem 'hello world' ale nigdzie nie widze mozliwosci wrzucenia na jakis hosting xd
  • Odpowiedz