Skocz do zawartości

39dll lobby + kilka pytań


Rekomendowane odpowiedzi

Witam,

ostatnio myślałem by coś podłubać w GM, i chciałbym zapytać was czy istnieje możliwość wykonania takiej czynności w GM z użyciem 39dll lub innej podobnej biblioteki sieciowej. Chciałbym aby każdy klient który stworzy pokój był serwerem danej rozgrywki nawet jeśli nie ma zewnętrznego IP, główny serwer odpowiadał by za lobby i główne przesyłanie danych a klient komunikował się z innymi klientami z jak najmniejszym użyciem głównego serwera. Pytanie czy da się to zrobić w Game Makerze i jakie obciążenie by to wytrzymało? Jeśli dało by radę prosiłbym o trochę teorii :)

Z góry dziękuje za sensowne odpowiedzi.

Odnośnik do komentarza
Udostępnij na innych stronach

Da się, ale musi być jakiś server matka, który by tworzył kilka lobby, np. lobby1 to gracze w tablicy players[1,X], a lobby2 to gracze w tablicy players[2,X]

 

No myślałem, tak: serwer matka rozdziela dane na temat pokoji (sesji gry) i graczy którzy dołączyli do rozgrywki.

Odnośnik do komentarza
Udostępnij na innych stronach

Takie coś nazywa się UDP hole punching. Sieci P2P tak działają.

 

S - serwer

A - klient A

B - klient B

 

A wysyła do S że chce stworzyć pokój.

S odpowiada A że pomyślnie stworzono

B znajduje pokój za sprawą S i chce do niego dołączyć

S wysyła do B ip A

S wysyła do A ip B

Teraz chcą nawiązać połączenie bezpośrednie. Odbywa się to mniej więcej tak:

A wysyła do B jakiś pakiet na porcie dajmy na to 4000

B wysyła do A jakiś pakiet też na porcie 4000

Jeśli pakiet UDP nie zginął to znaczy, że najprawdopodobniej został otworzony "tunel" między klientami. Najlepiej sprawdzić to jakimś pingiem czy coś. Mogą się komunikować na porcie 4000 przez UDP.

 

Działanie jest proste.

Kiedy A wysyła pakiet UDP do B to router A otwiera się na pakiety pochodzące od tego IP i portu na który został wysłany pakiet.

To samo z B.

A wyśle pakiet, który zostanie odrzucony przez B, ale za to mamy już "dziurę" na A.

W takim wypadku B wysyła pakiet do A. A go odbiera bo ma otworzoną "dziurę", a B ją stworzył u siebie wysyłając pakiet do A.

 

Poszperaj w googlach jak chcesz wiedzieć więcej. Proszę mnie poprawić jeżeli się gdzieś pomyliłem.

Od siebie dodam, że udało mi się takie połączenie nawiązać. Co prawda nie w GM'ie ale socket to socket więc bez różnicy.

 

No i jest możliwe również takie coś jak TCP hole punching. Nie zagłębiałem się w to więc nie wiem nic więcej.

Odnośnik do komentarza
Udostępnij na innych stronach

Wiem, że się wciskam z lekkim poślizgiem, ale:

Używanie 39dll to kiepski pomysł, jest niepotrzebnie skomplikowany, nawet sam twórca przyznaje, że jest słabo zrobiony w temacie z innym dll'kiem do obsługi sieci, którego osobiście polecam - Faucet Networking.

I don't know what Faucenet is (my guess, a new and much better networking lib) but I definitely recommend using it over [39dll], which I wrote when I literally just started programming in c++ />.

I'm always surprised to see that it is still popular, as it is very poorly coded.

 

Jest od dość dłuższej chwili, a i tak ludzie na tym forum zdają się wybierać 39dll...

 

http://gmc.yoyogames.com/index.php?showtopic=498062

Odnośnik do komentarza
Udostępnij na innych stronach

Może mi ktoś wytłumaczyć w jakim sensie szybsze? Bo na pewno nie w szybkości przesyłu, a operacje na buforze to tylko kilka ms.
39dll jest pierwszym dll-em pisanym przez 39stera i sam autor miał deklarować, że nie jest najlepszy

 

faucet networking ma być stabilniejszy od 39dll

 

osobiście tego ustrojstwa jeszcze nie sprawdziłem dokładniej (choć wygląda dobrze), działa na nim naprawdę niewiele gier - 39dll jest nadal baaardzo popularny

Odnośnik do komentarza
Udostępnij na innych stronach

Powiem ściągnąłem, odpaliłem jest jakieś hmmm inne, nie pasuje mi coś ale to może kwestia przyzwyczajenia, jeśli to na prawde jest lepsze od 39dll to trzeba będzie coś pokombinować a jak nie to wolę 39dll, większe wsparcie przynajmniej.

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...