GTA Közösség - A magyar GTA fórum

San Andreas Multiplayer (SA-MP) => SA-MP: Szerverfejlesztés => Segítségkérés => A témát indította: hegdavid95 - 2011. Május 11. - 17:46:26

Cím: Mi lassít egy szervert?
Írta: hegdavid95 - 2011. Május 11. - 17:46:26
Felsorolnátok nekem mindazokat a dolgokat amitõl egy szerver laggolhat?
Ha valaki már írt valamit azt lécci ne irja le más mégegyszer.
Cím: Mi lassít egy szervert?
Írta: a]X[e - 2011. Május 11. - 17:50:49
A nagyon sok objektõl..
Cím: Mi lassít egy szervert?
Írta: InAceX - 2011. Május 11. - 17:53:28
A sok kocsitól,aztán még ha sok a timer.
Cím: Mi lassít egy szervert?
Írta: hegdavid95 - 2011. Május 11. - 18:05:00
Szerintetek
egy ilyen timer csoporttol laggolhat a szeró?
SetTimer(\"Second\",1000,1);
   SetTimer(\"GodUpdate\",5000,1);
   SetTimer(\"OnPlayerKey\",50,1);
    SetTimer(\"AutoRespawn\",600000,1);
    SetTimer(\"AutoSave\",1000,1);
    KincsTimer = SetTimer(\"KincskeresesPublic\",10000,0);
    ReakcioTimer = SetTimer(\"ReakcioTeszt\",60000,0);
    MatekTesztTimer = SetTimer(\"MatekTeszt\",30000,0);
    SetTimer(\"PositionCheck\",200,1);
fontos tudni hogy a positioncheckben foreach van helyenként egymásba töb is.
Cím: Mi lassít egy szervert?
Írta: norbee0170 - 2011. Május 11. - 18:05:57
az is ha házi a szerver  8) :angel: ^-^
Cím: Mi lassít egy szervert?
Írta: hegdavid95 - 2011. Május 11. - 18:13:55
hostos
és amugy megfigyelhetõ hogy kb 15 player felett ezért gyanakszok legjobban a positionheck re ahol is egy rakás dolog van ami lefut 200 miniszekundumonként és egy helyen foreach ban foreach is van persze ez csak sok feltétel után.
Cím: Mi lassít egy szervert?
Írta: Csabesz - 2011. Május 11. - 18:18:36
Hiába van 100 idõzítõd... A lényeg az idõzítõk tartalma!
A szerver lazán elvégzi a számolásokat, de a számolások végén munka van ott picit laggolhat.
Pl: Összes autó mentése.. Ugye itt elég nagy munka van ezért lehet lagg.
Cím: Mi lassít egy szervert?
Írta: kurta999 - 2011. Május 11. - 18:35:57
AutoSave-val egy másodpercenként mented a játékosok statját ? ( Gondolom MySQL-be xD )
Mert akkor meg is van.
Cím: Mi lassít egy szervert?
Írta: hegdavid95 - 2011. Május 11. - 18:37:34
még arra lennék kiváncsi abbol lehet e lagg hogy végülis szinte mündenütt a mód elején létrehozott str[128] tömböt használom karakterláncok kezelésére pl SendClientMessageToAll nál meg végülis OnPlayerText nél meg mindenütt
igen gondolod hogy ez miatt?
Cím: Mi lassít egy szervert?
Írta: kurta999 - 2011. Május 11. - 18:41:01
Az, hogy felül létrehoztad ( Globálisan ), az csak jó megoldás.
Még szép, hogy azmiatt. Annál nálam is belaggol, ha elmentem a playerok statját amikor már kb van 10+ player.
Elég lenne rá egy perc is..
Cím: Mi lassít egy szervert?
Írta: hegdavid95 - 2011. Május 11. - 18:48:49
igaz én a gmx miatt csináltam igy utolag eléggé rohadthülye megoldás volt xD
cska  irni kell egy saját gmx parancsot :P
na most asszem megérdemelném  ha valaki lójol le NOOB ozna xD
Cím: Mi lassít egy szervert?
Írta: Zsolesszka - 2011. Május 11. - 21:16:45
Ezt a témát egyszer megvitattuk ChuckNorrissal katt ide az hogy te egyetlen egy str[128] használsz mindenhol az nem igazán nyerõ. A megfelelõ az hogy egy funkción belül használsz egy globális változót, fõleg azoknál amelyek igen csak igénybe vannak véve, gondolok itt OnPlayerText OnPlayerCommandText funkciókra, tehát a helyes megoldás:
 

new
    strcmd[128],
    strtext[128];
// Globál változók és mindegyiket külön külön használod egy adott funkción belül.
 
OnPlayerCommandText(..
{
  format(strcmd,..
}
OnPlayerText(..
{
    format(strtext, ...
}

 
Más.
Egy kérdés minek kell adatmentés rendszeres idõközönként?
Nem lenne elég csak akkor adatot menteni mikor egy esemény történik?
Pl.:
 

 

Az én véleményem szerint felesleges az összes adatot újra menteni adott idõközönként.
És igen a rövid idõzítésû timerek alatt lényeges hogy mi szerepel. Itt az egy másodpercnél kisebb ismétlõdõ timerekre gondolok. (még hogy \"timerek\", mennyi angol szót veszünk már át magyarosítva?)
És igen, minek is használsz egy másodpercnél kisebb ismétlõdésû idõzítõket, szükség van rá tényleg?
Cím: Mi lassít egy szervert?
Írta: TengeriMalac - 2011. Május 12. - 20:05:47
a GodUpdate mit takar?


Laggolhatsz attól is, ha esetleg Warning van a mododban
Cím: Mi lassít egy szervert?
Írta: Buba - 2011. Május 14. - 17:16:35

SetTimer(\"Second\",1000,1);

 
[/quote]
ez mit takar?
Cím: Mi lassít egy szervert?
Írta: kurta999 - 2011. Május 19. - 21:24:38
Nemkellett volna azt a globális változók témát zárni, mer én akarnák vmit hozzátenni :D.
Nekem ez a véleményen, hogy szerintem nem lassít a globális, mert a pawn single thread. Azaz egy dolog fut egyszerre. Akkor indul a másik, ha az elõtte lévõ lefut. Úgyhogy ugyanúgy fog végezni egy lokális változóval, mint egy globálissal.
Cím: Mi lassít egy szervert?
Írta: Zsolesszka - 2011. Május 20. - 00:21:09
Idézetet írta: kurta999 date=1305833078\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"8095\" data-ipsquote-contentclass=\"forums_Topic
Nemkellett volna azt a globális változók témát zárni, mer én akarnák vmit hozzátenni :D.
Nekem ez a véleményen, hogy szerintem nem lassít a globális, mert a pawn single thread. Azaz egy dolog fut egyszerre. Akkor indul a másik, ha az elõtte lévõ lefut. Úgyhogy ugyanúgy fog végezni egy lokális változóval, mint egy globálissal.
 
Lehet de írtam hamar egy rövidke tesztet ami szerint jobb kettõ global string mint egy.
Íme:
 

#include <a_samp>
new
globalone[4096],
globaltwo[4096];
public
OnFilterScriptInit()
{
printf(\"Global string teszt started.\");
globalone = \"teszt\\n\";
new
time;
//¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
// Egy darab global string teszt
time = GetTickCount();
for(new i; i < 512; i++)
format(globalone, sizeof globalone, \"%s%s\", _globalone());
printf(\"Egy global string terhelés teszt ideje: %dms\", GetTickCount() - time);
////////////////////////////////////////////////////////////////////////////////
// Két darab global string teszt
time = GetTickCount();
for(new i; i < 512; i++)
format(globalone, sizeof globalone, \"%s%s\", _globaltwo());
printf(\"Kettõ global string terhelés teszt ideje: %dms\", GetTickCount() - time);
//¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
//És mégeyszer ugyanez fordított sorrendben:
//¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
// Két darab global string teszt
time = GetTickCount();
for(new i; i < 512; i++)
format(globalone, sizeof globalone, \"%s%s\", _globaltwo());
printf(\"Kettõ global string terhelés teszt ideje: %dms\", GetTickCount() - time);
////////////////////////////////////////////////////////////////////////////////
// Egy darab global string teszt
time = GetTickCount();
for(new i; i < 512; i++)
format(globalone, sizeof globalone, \"%s%s\", _globalone());
printf(\"Egy global string terhelés teszt ideje: %dms\", GetTickCount() - time);
//¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
return 1;
}
// Az egy darabként létrehozott global string extrem terhelése
stock
_globalone()
{
//--- A terhelés..
for(new i; i < 50000; i++)
format(globalone, sizeof globalone, \"%s\", globalone);
//---
new
str[10];
str = \"teszt\\n\";
return str;
}
// Két darab global string esetében a második string extrem terhelése
stock
_globaltwo()
{
//--- A terhelés..
for(new i; i < 50000; i++)
format(globaltwo, sizeof globaltwo, \"%s\", globaltwo);
//---
new
str[10];
str = \"teszt\\n\";
return str;
}

 
És az eredmény:
 
[2011.05.20 00:11:09] Egy global string terhelés teszt ideje: 9748ms
[2011.05.20 00:11:17] Kettõ global string terheléteszt ideje: 8786ms
[2011.05.20 00:11:26] Kettõ global string terhelés teszt ideje: 8848ms
[2011.05.20 00:11:36] Egy global string terhelés teszt ideje: 9326ms
[/quote]
Ezek alapján csak jobb kettõ mint egy global stringet alkalmazni mindenhol.
Tehát én még mindig maradok annál hogy egy funkciónak legyen saját global stringje, (lefoglalt memória terület, amin tud dolgozni).
De szívesen látnék valami más tesztet ami ennek ellenkezõjét bizonyítja.