MroczekBall3D
MroczekBall3D
#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źć ;/
  • Najlepsze
  • Wszystkie komentarze
spetz
spetz
2
@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ż
spetz
spetz
2
@Nartenlener: asp.net/learn - na dole jest kilka.
spetz
spetz
1
@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.
spetz
spetz
1
@MroczekBall3D: hosting dostaniesz za darmo, podobnie jak np domenę .tk.
lukpep
@MroczekBall3D: sprawdź pushera - z tego co kojarzę to do 100k wiadomości dziennie jest free
spetz
spetz
1
Nartenlener
@spetz: Ja krzywo napisałem, Ty krzywo zrozumiałeś... ale i tak mam to o co pytałem ( ͡° ͜ʖ ͡°)

moon_bluebird
@MroczekBall3D: nie rozumiem, wszystko chcesz napisać w SQL'u? :)
t.....k
t.....k
leoha
leoha
0
chat w sql... rotfl
MroczekBall3D
MroczekBall3D
MroczekBall3D Autor
0
@moon_bluebird: @spetz: tylko to mam do dyspozycji :P
Jak pisałem, szukałem innego rozwiązania. Czytałem o SignalIR, ale to przypadkiem nie wymaga własnego serwera?

A w tagach @moon_bluebird dałem #csharp -> C# :P
MroczekBall3D
MroczekBall3D
MroczekBall3D Autor
0
@spetz: Nie mam nawet domeny własnej, po prostu tylko bazę SQL.
@leoha: Od biedy może być, dopiero się uczę (a to 1k to założenie xD)
MroczekBall3D
MroczekBall3D
MroczekBall3D Autor
0
@spetz: no proszę, tak Ci amerykanie te strony robią, że porażka z informacjami xd
Lecę sprawdzać, na razie dzięki :)
MroczekBall3D
MroczekBall3D
MroczekBall3D Autor
0
@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
Nartenlener
@spetz: A coś darmowego polecanego do ASP.NET również znasz?
Nartenlener
@spetz: No patrz Pan... a ja się na Azure szarpłem. Dzięki!
spetz
spetz
0
@Nartenlener: aha, pytałeś o hosting (zrozumiałem najpierw, że tutoriale)? W tym przypadku na pewno jest kilka darmowych hostingów ale np. takie webio.pl kosztuje grosze.
spetz
spetz
0
@Nartenlener: #pdk ( ͡° ͜ʖ ͡°).