Aplikacje oparte na serwerach - jak?

0

Jest wiele programow ktore dzialaja w oparciu o serwery - najbardziej banalny przyklad to chyba Gadu-Gadu. Taki system rozwiazuje problemy z uzytkownikami za natem podczas polaczen 'bezposrednich'. Czy ktos moze mi powiedziec jak wyglada taki system i w jaki sposob oprzec to na Delphi? Zastanawia mnie tez jak to sie dzieje ze Gadu wie kto jest dostepny, kto nie itp? Moze jest to oparte o baze danych ale przeciez przy takiej ilosci odwolan SQL wszystko by siadlo? Bede bardzo wdzieczny jak ktos nakresli mi jak to wyglada i jak mogloby wygladac za pomoca programowania w delphi - chyba ze rozwiazania sa uniwersalne... Z gory dziekuje za pomoc!
(ps. od razu mowie ze nie pisze kolejnego komunikatora :P)

0

Wszystko zależy od tego, co chcesz osiągnąć. Aplikacji opartych o serwery jest multum. Ale sporo lepszym przykładem niż przykład GG jest telnet. Wydaje mi się, że to najprostsza aplikacja łącząca się z serwerem. A co robi serwer, to już kwestia tylko inwencji twórczej autora.
Gadu-Gadu nie jest dobrym przykładem do analizy jeszcze z jednego powodu - brak dokumentacji, brak dostępnego kodu klienta i brak dostępnego kodu serwera.
Akurat Gadu-Gadu opiera się o bazę danych. Z tym że Gadu-Gadu sp z o.o. dysponuje prawie dziesięcioma serwerami odpowiedzialnymi za połączenia z klientami plus kilka zapasowych i parę jeszcze specjalistycznych do innych zadań. Z całą pewnościąbaza danych stoi na osobnej maszynie z bardzo szybkimi połączeniami (GB?) z pozostałymi serwerami i na pewno na mocniejszym silniku niż MySQL. A co do tego wywracania, to przecież GG się wywraca bardzo często ;).
Jeśli interesuje Cię komunikacja natychmiastowa, polecam przyjrzeć się protokołowi XMPP (znanemu również jako Jabber): Masz dostępnych wiele klientów wraz z kodem źródłowym chyba w każdym normalnym języku programowania (również PHP i inne bardzo nietypowe w tych zastosowaniach języki), do tego wiele różnych serwerów pod różne systemy operacyjne, a na dokładkę pełną dokumentację protokołu.

0

A czy moze mi ktos przyblizyc XMPP? W necie jest to troszke chaotycznie porozmieszczane i trudno dotrzec do istotnych informacji... Chodzi mi np. o to jaki, gdzie i w jaki sposob mozna postawic serwer XMPP? Sa jakies komponenty dla Delphi do obslugi tego protokolu?

0

Dla Delphi widziałem ze strony klienta. Jeśli chodzi o stawianie serwera, to najczęściej spotykany jest jabberd2 (pod Linuxa), ale pod Windęteż sięcośznajdzie. Generalnie polecam:
www.jabberpl.org (i forum.jabberpl.org)
www.jabberstudio.org
www.jabber.org
//Od kiedy "D e l p h i e g o" jest ortem??

0

to ty wysyłasz że jesteś taki czy owaki a serwerGG przekazuje to dalej tym co sie pytają

const
// PAKIETY ODEBRANE

GG_WELCOME = $1; //Liczba do wyznaczenie hashu hasła
GG_LOGIN_OK = $3; //Logowanie powiodło się
GG_SEND_MSG_ACK = $5; //Potwierdzenie wiadomości
GG_LOGIN_FAILED = $9; //Logowanie nie powiodło się
GG_RECV_MSG = $a; //Przychodząca wiadomość
GG_DISCONNECTING = $b; //Zerwanie połączenia
GG_NOTIFY_REPLY = $c; //Stan listy kontaktów przed GG 6.0
GG_PUBDIR50_REPLY = $e; //Odpowiedź katalogu publicznego
GG_STATUS60 = $f; //Zmiana stanu
GG_USERLIST_REPLY = $10; //Odpowiedź listy kontaktów na serwerze
GG_NOTIFY_REPLY60 = $11; //Stan listy kontaktów
GG_NEED_EMAIL = $14; //Logowanie powiodło się, ale powinniśmy uzupełnić adres e-mail w katalogu publicznym

// PAKIETY WYSŁANE

GG_NEW_STATUS = $2; //Zmiana stanu
GG_PING = $8; //Ping
GG_SEND_MSG = $b; //Wysłanie wiadomości
GG_ADD_NOTIFY = $d; //Dodanie do listy kontaktów
GG_REMOVE_NOTIFY = $e; //Usunięcie z listy kontaktów
GG_NOTIFY_FIRST = $f; //Początkowy fragment listy kontaktów większej niż 400 wpisów
GG_NOTIFY_LAST = $10; //Ostatni fragment listy kontaktów
GG_LIST_EMPTY = $12; //Pusta lista
GG_PUBDIR50_REQUEST = $14; //Zapytanie katalogu publicznego
GG_LOGIN60 = $15; //Logowanie
GG_USERLIST_REQUEST = $16; //Zapytanie listy kontaktów na serwerze

// MOŻLIWE STATUSY

GG_STATUS_NOT_AVAIL = $1; //Niedostępny
GG_STATUS_NOT_AVAIL_DESCR = $15; //Niedostępny z opisem
GG_STATUS_AVAIL = $2; //Dostępny
GG_STATUS_AVAIL_DESCR = $4; //Dostępny z opisem
GG_STATUS_BUSY = $3; //Zajęty
GG_STATUS_BUSY_DESCR = $5; //Zajęty z opisem
GG_STATUS_INVISIBLE = $14; //Niewidoczny
GG_STATUS_INVISIBLE_DESCR = $16; //Niewidoczny z opisem
GG_STATUS_BLOCKED = $6; //Zablokowany
GG_STATUS_FRIENDS_MASK = $8000; //Tylko dla przyjaciół

tak wyglada nagłówek pakietów protokołu GG

TPakiet = packed record
typ : integer;
dlugosc: integer;
end;

logujesz sie za pomoca takiego pakietu

TLoguj = record // $15
pakiet : TPakiet;
Numer : Integer;
HashPass : Integer;
Status : Integer;
WersjaGG : Integer;
ZeroChar : Char;
LocalIP : Integer;
Port : Short;
ExternalIP : Integer;
ExternalPort: Short;
Rozmiar_graf : Char;
UnknownByte : Char;
end;

ustawiasz w nich swoje dane ja sie zalogujesz wysylasz swoja liste kontaktów

TMoja_lista = packed record //$10 jeśli twoja lista jest mniejsza niż 400
pakiet : TPakiet;
numer : integer;
typ : char;
end;

w odpowiedzi dostajesz pakiet. masz tutaj informacje o swoim kontakcie zaraz po zalogowaniu

TGG_NOTIFY_REPLY60 = record //$11
numer: integer;
status: char;
remote_ip: integer;
remote_port: short;
wersjaGG: char;
rozmiar_graf: char;
unknown1: char;
description_size: char;
description: char;
czas: integer;
end;

a taki bedziesz dostawał później jesli na twojej liście kontaktów coś sie zmini czyli dojdzie ktoś nowy, ktoś zmieni opis czy se pójdzie

TGG_STATUS60 // $F
numer: integer;
status: char;
remote_ip: integer;
remote_port: short;
wersjaGG: char;
rozmiar_graf: char;
unknown1: char;
opis: TOpis;
czas: integer;
end;

i tak właśnie dowiadujesz się o tym kto jest dostepny, kto ma jaki opis jaka wersje GG, IP, czy jaką ma ustawiąną wielkość przyjmowanej grafiki.
To taki mały zarys.

0

Exodus jest tak skomplikowany ze nie moge nawet wyodrebic funckjicji odpowiedizalnych za polaczenie, logowanie itd nie wspominajac juz o tym jak to wszystko polaczyc w jedna calosc. Sciagnalem sobie na kompa serwerek i na razie na tym stoje bo nie moge przegryzc sie nawet przez polaczenie :( Nie szukam gotowej solucji ani toturiala ale jakiegos naprowadzenia bo zanim przegryze sie przez Exdusa i znajde tam to co mi jest potrzebne (a jest to ulamek funkcjonalnosci tego programu - potrzebuje logowania, statusow, przesylania komunikatow i nic wiecej) to mina tygodnie a nawet miesiace... Zal troche tego czasu bo i tak na 'zabawe w programowanie' mam niewiele czasu ze wzgledu na studia :( Nie zale sie ale prosze jedynie o pomoc :)

0

Akurat Exodusa bym do praktycznych zastosowań nie polecał - coś tam chciałem sobie przetestować (z pół roku temu) i do tej pory (mimo używania na codzień innego klienta) transport Gadu się nie zachowuje jak potrzeba ;).

Natomiast jeśli chcesz na prawdę prosty komunikator, to gdzieś można poszukać czegoś takiego jako przykładu obsługi TClientSocket/TServerSocket.

0

Tak jak mowilem nie chce tworzyc komunikatora - potrzebuje platformy dla komunikacji P2P miedzy uzytkownikami ale chodzi tu nie o czatowanie tylko o zupelnie inne sprawy. Statusy maja sluzyc jedynie do okreslania kanalow, a wiadomosci forme komunikacji miedzy elementami systemu. Zalezy mi na takim systemie ktory bedzie w stanie oblsuzyc wiele polaczen wiec nadaje sie do tego zdecydowanie XMPP. Poczytalem calkiem sporo o samym systemie i jego funkcjonowaniu ale nie moge go rozgryzc wzgledem Delphi :/ Niby wszystko OK, bo mam pomysl i mozna by ruszac ale nie wiem na jakiej zasadzie oprzec aplikacje wiec poki nie rozwiaze problemu bezposredniej komunikacji (w tym nat-to-nat) nie ma sie za co brac. Poddaje wciaz analizie kod Exodusa ale im dluzej w tym siedze tym wydaje mi sie to bardziej szalone :/ Nie chce opierac tego o ActivX'y ktore sa w necie bo bedzie to wymagalo instalacji po stronie uzytkownika dodatkowych modulow, a tego chcialbym uniknac. Prosze - pomozcie

0

A więc po kolei:
Generalnie gdzieś w sieci widziałem jakieś komponenty do Jabbera (na jabberpl.org w dziale Developer czy jakoś tak są chyba linki, jak nie, to gdzieś na jabberstudio.org coś powinno się znaleźć).
Jeśli chodzi natomiast o komunikację nat-nat p2p to nie jest to tak na prawdę możliwe. Wszystko opiera się o jakieś serwery (w Jabberze są tzw. file-proxy), albo rozproszoną sieć "serwerów" na komputerach klientów (tak jak jest zdaje się zrealizowana kwestia Skype - jeśli masz zewnętrzne IP i masz "wolne" - w sensie "free" nie "slow" ;) - łącze, to stajesz się serwerem pośredniczącym dla takich, co chcą pogadać zza natów).
No chyba, że istnieje możliwość przekierowywania portów albo otworzenia tunelu między natami, ale jest to kwestia konfiguracji routera/serwera natu a nie programu na komputerze-kliencie.

0

Ziomek... No przeciez pisalem ze do tego sluzyc ma mi XMPP zeby sluzyl jako serwer przy polaczeniach. Gadu-Gadu w ogole nie bralem pod uwage - dla mnie protokol GG jest jednym wielkim pobojowiskiem. Samo XMPP w przeciwienstwie do Jabbera to platorma ktora ma sluzyc nie tylko dla IM ale dla komunikacji jako takiej rozumienej ogolnie i szeroko. Jabber czesto jest mylony z XMPP - owszem to drugie powstalo z tego pierwszego ale obecnie Jabber korzysta z jedynie waskiego zakresu swojego 'potomka' (choc XMPP jest wstecznie kompatybilny do Jabbera). Jak juz wspominalem daje to ogromne mozliwsci ALE nie jestem w stanie nawet polaczyc sie z serwerem - potrzebuje jakiejs pomocy :) Na jabber.org nie ma komponentow - jest tam exodus i jabbercom ale to drugie to kontrolka ActiveX z ktorej korzystac bym raczej nie chcial. Moze ktos kiedys sukcesem zakonczyl zabawe z tym protokolem?

0

Szczerze powiedziawszy jeśli jesteś zdecydowany na XMPP, to radziłbym po pomoc dalszą sięgać na forum jabberpl.org->Programowanie. Tam znajdziesz raczej więcej osób, które mogą mieć z tym szersze doświadczenie.

0

sek w tym ze tam do zadnych logicznych wnioskow nikt do tej pory nie doszedl choc tematow zwiazanych z 'delphi-jabber' jest kilka. na tym forum jest zdecydowanie wiecej specjalistow :)

0

czy ktos wie cos na temat komponentu tjabber? bo pojawily sie na tym forum jakies szczatkowe informacje ale sprawa jakos ucichla (w zasadzie nawet nie powstala) a ja nic nie wiem :) sprawa XMPP kontra Jabber nie ma juz teraz wiekszego znaczenia :/ analizuje wciaz exodusa ale zeby go zrozumiec trzeba przejdzec kilka tysiecy linii a jest tak napisany ze nie wiadomo co do czego... HELP! :(

0

Nav coś zaczynał tworzyć o ile pamiętam komponent TJabber, ale nie wiem co z tego wyszło - mam wrażenie, że nic.

0

[browar] Dzieki komponentom INDY mozna laczyc zza natu z serwerem zza natu dzieki dodatkowemu serwerowi glownemu ktory posiada zewnetrzne IP
Zrobilem program na tych komponentach ktory mam tylko dla siebie , bo gdy wepchne komus klienta to robie z jego kompem co chce i nawet jesli jest on za natem.
To nie trojan a raczej takie zdalne sterowanie kompem , bo moge nim wszystko co w kompie mozliwe, nawet otworzyc notatnik i wnim pisac czy przegladarke internetowa i przegladac, wpisywac gdziekolwiek wszystko co chce! Plik np: kernel32.dll moge otworzyc i zedytowac po czym zapisac go nawet jesli jest w stanie uzywania przez process...

Anonim no band no hacker [!!!] [!!!] [!!!] [browar] [browar] [browar]
cya [!!!]

1 użytkowników online, w tym zalogowanych: 0, gości: 1