Skocz do zawartości

Witamy w Nieoficjalnym polskim support'cie AMX Mod X

Witamy w Nieoficjalnym polskim support'cie AMX Mod X, jak w większości społeczności internetowych musisz się zarejestrować aby móc odpowiadać lub zakładać nowe tematy, ale nie bój się to jest prosty proces w którym wymagamy minimalnych informacji.
  • Rozpoczynaj nowe tematy i odpowiedaj na inne
  • Zapisz się do tematów i for, aby otrzymywać automatyczne uaktualnienia
  • Dodawaj wydarzenia do kalendarza społecznościowego
  • Stwórz swój własny profil i zdobywaj nowych znajomych
  • Zdobywaj nowe doświadczenia

Dołączona grafika Dołączona grafika

Guest Message by DevFuse
 

Zdjęcie

Socket laguje serwer.


  • Zamknięty Temat jest zamknięty
18 odpowiedzi w tym temacie

#1 csskill

    Życzliwy

  • Użytkownik

Reputacja: 0
Nowy

  • Postów:25
Offline

Napisano 23.05.2010 10:04

Witam
Napisałem funkcję mającą na celu łączenie się do strony www, wysłania do niej IP gracza oraz otrzymanie odpowiedzi czy gracz ma zmienne IP (w formie litery Z - zmienne lub S - stałe).
Nie wiem dlaczego przy wykonaniu skryptu cały serwer dostaje laga na ~2 sekundy:

public test_ip(id)
{
	new g_Socket;
	get_user_ip(id, name[id] ,63); 
	new iError;
	static szData[599];
	g_Socket = socket_open( "cs-passion.eu" , 80 , SOCKET_TCP , iError );
	if( g_Socket && !iError )
	{
		static szPacket[100];
		formatex( szPacket , 99 , "GET /hostname.php?ip=%s HTTP/1.1^r^nHost: cs-passion.eu^r^nConnection: close^r^n^r^n", name[id]);
		socket_send( g_Socket , szPacket , strlen(szPacket) );
		if ( socket_change( g_Socket ) )
		{
			socket_recv( g_Socket , szData , 300 );
			if ( strlen( szData ) )	
			{
				if(strfind (szData , "Z", 0, 0 ) == -1)
					return 0;
				else
					return 1;
						
				socket_close( g_Socket );
			}
		}
	}
	return 0;
}

Z góry dziękuję za pomoc!

Użytkownik csskill edytował ten post 23.05.2010 10:06

  • +
  • -
  • 0
Najlepsze serwery c-s:

Dołączona grafika

#2 mgr inż. Pavulon

    C35H60Br2N2O4

  • Przyjaciel

Reputacja: 1 742
Godlike

  • Postów:6 881
  • Steam:steam
  • Imię:Konrad
  • Lokalizacja:Koniecpol
Offline

Napisano 23.05.2010 11:42

Nie wiem gdzie i kiedy wywołujesz tą funkcję ale socket'y niestety już tak mają że laggują w czasie nawiązywania połączenia.
  • +
  • -
  • 0

#3 darkelf

    Początkujący

  • Użytkownik

Reputacja: 1
Nowy

  • Postów:15
  • Lokalizacja:Daleko
Offline

Napisano 23.05.2010 11:44

Nie wiem gdzie i kiedy wywołujesz tą funkcję ale socket'y niestety już tak mają że laggują w czasie nawiązywania połączenia.


Skrypt wykonuje się 5sek po podłączeniu gracza pod serwer.
  • +
  • -
  • 0

#4 G[o]Q

    I'm G[o]Q

  • Przyjaciel

Reputacja: 1 344
Godlike

  • Postów:3 563
  • Steam:steam
  • Imię:Krzysiek
  • Lokalizacja:C: / program Files / Valve / Cstrike / G[o]Q.dem
Offline

Napisano 23.05.2010 13:33

otworz socket na poczatku mapy np w plugin_cfg() a potem tylko go wykorzystuj i w plugin_end() go zamknij
  • +
  • -
  • 0
Manual ponad wszystko, konsola ponad manual :D :&

Chcesz wysłać do mnie PW ? użyj nazwy GoQ zamiast G[o]Q
Chcesz Kupić moduł płatności via Pukawka,Tserwery, Gamesol, Zabijaka do mojego sklepu? napisz PW cena to tylko 10 zł/sztuka

GG:6022845 (nie pomagam za free osobom ponizej rangi MoD) :D

#5 mgr inż. Pavulon

    C35H60Br2N2O4

  • Przyjaciel

Reputacja: 1 742
Godlike

  • Postów:6 881
  • Steam:steam
  • Imię:Konrad
  • Lokalizacja:Koniecpol
Offline

Napisano 23.05.2010 14:28

Goq to nie przejdzie.
  • +
  • -
  • 1

#6 darkelf

    Początkujący

  • Użytkownik

Reputacja: 1
Nowy

  • Postów:15
  • Lokalizacja:Daleko
Offline

Napisano 23.05.2010 18:52

Goq to nie przejdzie.


Możesz Pavulon wyjaśnić dlaczego nie?
Przy dłuższym nie korzystaniu z socketa "sesja" się zamyka?

P.S.
Nie atakuję Cię tylko pytam :D
  • +
  • -
  • 0

#7 G[o]Q

    I'm G[o]Q

  • Przyjaciel

Reputacja: 1 344
Godlike

  • Postów:3 563
  • Steam:steam
  • Imię:Krzysiek
  • Lokalizacja:C: / program Files / Valve / Cstrike / G[o]Q.dem
Offline

Napisano 23.05.2010 18:58

nie wiem socketami sie nie bawilem ale jak patrze na to ze otwarcie nie potrzebuje zadnych parametrow zmiennych to mozna zrobic jak z Vault czy SQL no ale jak mowisz ze sie nie da to trudno :/

jak to ktos pisal sockety nie sa najlepiej zrobione w amxx :/
  • +
  • -
  • 0
Manual ponad wszystko, konsola ponad manual :D :&

Chcesz wysłać do mnie PW ? użyj nazwy GoQ zamiast G[o]Q
Chcesz Kupić moduł płatności via Pukawka,Tserwery, Gamesol, Zabijaka do mojego sklepu? napisz PW cena to tylko 10 zł/sztuka

GG:6022845 (nie pomagam za free osobom ponizej rangi MoD) :D

#8 darkelf

    Początkujący

  • Użytkownik

Reputacja: 1
Nowy

  • Postów:15
  • Lokalizacja:Daleko
Offline

Napisano 23.05.2010 20:06

nie wiem socketami sie nie bawilem ale jak patrze na to ze otwarcie nie potrzebuje zadnych parametrow zmiennych to mozna zrobic jak z Vault czy SQL no ale jak mowisz ze sie nie da to trudno :/

jak to ktos pisal sockety nie sa najlepiej zrobione w amxx :/


To jak mogę inaczej pobierać hosta z adresu IP przez amxx ?
  • +
  • -
  • 0

#9 Vertricus

    Godlike

  • Przyjaciel

Reputacja: 426
Wszechobecny

  • Postów:1 549
  • Lokalizacja:.
Offline

Napisano 23.05.2010 20:18

Moduł netdb (dodatkowy) na alliedzie jest ;d
  • +
  • -
  • 1

#10 darkelf

    Początkujący

  • Użytkownik

Reputacja: 1
Nowy

  • Postów:15
  • Lokalizacja:Daleko
Offline

Napisano 23.05.2010 20:33

Moduł netdb (dodatkowy) na alliedzie jest ;d


Dzięki chciałem jeszcze prosić link do posta albo adres do downloadu ponieważ szukajka mnie zabiła:

AlliedModders - Search Results
  • +
  • -
  • 0

#11 G[o]Q

    I'm G[o]Q

  • Przyjaciel

Reputacja: 1 344
Godlike

  • Postów:3 563
  • Steam:steam
  • Imię:Krzysiek
  • Lokalizacja:C: / program Files / Valve / Cstrike / G[o]Q.dem
Offline

Napisano 23.05.2010 20:39

NETDB - some functions from POSIX netdb.h - AlliedModders
  • +
  • -
  • 1
Manual ponad wszystko, konsola ponad manual :D :&

Chcesz wysłać do mnie PW ? użyj nazwy GoQ zamiast G[o]Q
Chcesz Kupić moduł płatności via Pukawka,Tserwery, Gamesol, Zabijaka do mojego sklepu? napisz PW cena to tylko 10 zł/sztuka

GG:6022845 (nie pomagam za free osobom ponizej rangi MoD) :D

#12 darkelf

    Początkujący

  • Użytkownik

Reputacja: 1
Nowy

  • Postów:15
  • Lokalizacja:Daleko
Offline

Napisano 23.05.2010 20:44

Moduł netdb (dodatkowy) na alliedzie jest ;d


Dzięki chciałem jeszcze prosić link do posta albo adres do downloadu ponieważ szukajka mnie zabiła:

AlliedModders - Search Results


Ok już mam!

Postaram się opanować jego użycie.
  • +
  • -
  • 0

#13 Vertricus

    Godlike

  • Przyjaciel

Reputacja: 426
Wszechobecny

  • Postów:1 549
  • Lokalizacja:.
Offline

Napisano 23.05.2010 21:40

new szIP[32], szHost[128]
get_user_ip(id, szIP, 31, 1)
netdb_gethostbyaddr(szIP, szHost, 127)


Metoda nie zawsze skuteczna z góry mówię ;>
  • +
  • -
  • 0

#14 darkelf

    Początkujący

  • Użytkownik

Reputacja: 1
Nowy

  • Postów:15
  • Lokalizacja:Daleko
Offline

Napisano 23.05.2010 21:44

new szIP[32], szHost[128]
get_user_ip(id, szIP, 31, 1)
netdb_gethostbyaddr(szIP, szHost, 127)


Metoda nie zawsze skuteczna z góry mówię ;>


W jakim sensie nie skuteczna?

Chodzi o samą funkcję:

netdb_gethostbyaddr

??
  • +
  • -
  • 0

#15 ZiuTeK

    Wszechwiedzący

  • Użytkownik

Reputacja: 135
Zaawansowany

  • Postów:507
  • Lokalizacja:inąd
Offline

Napisano 23.05.2010 22:36

NetDB robi to samo co twoj socket, laguje serwer. Jedyne mozliwe rozwiazanie to wykorzystac plugin ktory sprawdza zakresy IP.
Przerabialem plugin showIP i recznie dopisywalem IP zeby miec wlasne rangi zmiennych IP ale mozesz uzyc tez pluginu seby o nazwie advanced amx_ip.
Tam tez trzeba miec rangi zmiennych IP ale jesli nie znajdziesz nigdzie na necie to moge ci troche podac.
To wg mnie 100 razy lepsze rozwiazanie niz uzywanie socketow i modulu netdb.
  • +
  • -
  • 0

#16 darkelf

    Początkujący

  • Użytkownik

Reputacja: 1
Nowy

  • Postów:15
  • Lokalizacja:Daleko
Offline

Napisano 24.05.2010 07:35

NetDB robi to samo co twoj socket, laguje serwer. Jedyne mozliwe rozwiazanie to wykorzystac plugin ktory sprawdza zakresy IP.
Przerabialem plugin showIP i recznie dopisywalem IP zeby miec wlasne rangi zmiennych IP ale mozesz uzyc tez pluginu seby o nazwie advanced amx_ip.
Tam tez trzeba miec rangi zmiennych IP ale jesli nie znajdziesz nigdzie na necie to moge ci troche podac.
To wg mnie 100 razy lepsze rozwiazanie niz uzywanie socketow i modulu netdb.


Moim zdaniem wpisywanie rang jest nieskuteczne ponieważ wykrywasz tylko znanych dostawców internetu (ze zmiennym ip) n. netia i neostrada są jeszcze zjebane "osiedlówki" ze zmiennym IP oraz osiedlówki ze stałym (jednym zewnętrznym IP) w którym otrzymanie bana zakończyło by się banem dla wszystkich.

Wydaje mi się iż wykrywanie nazwy hosta będzie skuteczniejsze poza tym odpowiedni system logowania oparty ma mysql pozwoli na szybką analizę nowych zmiennych IP oraz sieci osiedlowych.

Pozdrawiam i postaram się rozwiązać problem przy użyciu modułu NetDB.

Pytanie poza kolejnością:
Moduły do metamoda pisze się w c++ ?
  • +
  • -
  • 0

#17 ZiuTeK

    Wszechwiedzący

  • Użytkownik

Reputacja: 135
Zaawansowany

  • Postów:507
  • Lokalizacja:inąd
Offline

Napisano 24.05.2010 22:30

Jesli chcesz tylko wykrywanie nazwy hosta to masz plugin show_ip przerobiony przez kamaza z fragareny.
Przerobil go w ciekawy sposob, zeby nie sprawdzalo ci hosta za kazdym razem jak wpiszesz amx_ip tylko gdy gracz wchodzi na serwer jest jednoczesnie pobierany jego host.

Kamaz wtedy sprawdza czy nazwa hosta ma w sobie adsl, dynamic lub inne takie ... wystarczy ze przerobisz jego plubin w ten sposob zeby nazwe hosta pobieralo do tablicy i pozniej wyswietlalo przy wpisaniu amx_ip.
  • +
  • -
  • 0

#18 Vertricus

    Godlike

  • Przyjaciel

Reputacja: 426
Wszechobecny

  • Postów:1 549
  • Lokalizacja:.
Offline

Napisano 24.05.2010 23:07

NetDB robi to samo co twoj socket, laguje serwer. Jedyne mozliwe rozwiazanie to wykorzystac plugin ktory sprawdza zakresy IP

Z tym się nie zgodzę :>
NetDB robi to po stronie serwera.
O ile się nie mylę to z socket'em jest tak, że wykonuje to serwer www po czym musi przesłać to jeszcze na serwer. (przy netdb mamy wynik)
Korzystałem z tego modułu nie lagował.
Nie skuteczny, w sensie takim że po hoście nie zawsze można stwierdzić czy static czy dynamic :>
  • +
  • -
  • 0

#19 darkelf

    Początkujący

  • Użytkownik

Reputacja: 1
Nowy

  • Postów:15
  • Lokalizacja:Daleko
Offline

Napisano 25.05.2010 08:18

NetDB robi to samo co twoj socket, laguje serwer. Jedyne mozliwe rozwiazanie to wykorzystac plugin ktory sprawdza zakresy IP

Z tym się nie zgodzę :>
NetDB robi to po stronie serwera.
O ile się nie mylę to z socket'em jest tak, że wykonuje to serwer www po czym musi przesłać to jeszcze na serwer. (przy netdb mamy wynik)
Korzystałem z tego modułu nie lagował.
Nie skuteczny, w sensie takim że po hoście nie zawsze można stwierdzić czy static czy dynamic :>


Zawsze po hoście jestem w stanie odróżnić czy gracz jest z sieci (tp, netia, plus) jeśli pojawił by się jakiś inny gracz jego host zostaje automatycznie dodany do bazy ... dlaczego?
Każdy gracz na moim serwerze przy pierwszym wejściu ma przypisywany unikatowy identyfikator, jeśli gracz o tym samym identyfikatorze wejdzie na serwer z innym IP automatycznie zostaje dodany do bazy zmiennych IP!
Zrobiłem tak ponieważ drażnią mnie gnojki ze zmiennym IP ALE TYLKO CHEATUJĄCY do reszty nic nie mam!
Jest jeszcze opcja iż gracz użyje proxy do połączenia z serwerem niestety na moje serwery nie można łączyć się przez proxy zablokowałem tą opcję na poziomie systemu (Linuxa: Debian), nie serwera gry!

Nie mylisz się socket (w moim przypadku![Bo może również tylko wysyłać dane albo tylko odbierać dane]) najpierw wysyła dane do serwera www a potem je odbiera w postaci pakietów danych w moim przypadku czas generowania odpowiedzi skryptu trwał 0.05 sek czyli nie wiele ale wracając do tematu moduł który mi poleciłeś działa świetnie jeszcze raz dzięki!

Użytkownik darkelf edytował ten post 25.05.2010 08:21

  • +
  • -
  • 0




Użytkownicy przeglądający ten temat: 0

0 użytkowników, 0 gości, 0 anonimowych