Jump to content
php.lv forumi

krikulis

Reģistrētie lietotāji
  • Posts

    100
  • Joined

  • Last visited

Posts posted by krikulis

  1. Varētu būt tev taisnība. Ar spēļu serveriem neesmu ņēmies, vien domāju, ka varētu pamēģināt. Nezināju, ka tiem ir savi protokoli. Reverse proxy varētu paķert DNS vārdu, tad forwardēt. Var būt strādā. Tiešām tad nezinu. Nav arī kur pašlaik pamēģināt. Vai tajos spēļu serveros nav pašiem iebūvētas tādas lietas? Būtu interesanti, ja visi spēļu serveri skrietu tikai uz viena fiziskā servera bez jebkādiem klāsterēšanas un load balancing mehānismiem. Vai nav attiecīga OpenSource risinājuma arī priekš šīm vajadzībām? Tiešām nezinu pat kā meklēt, jo esmu svešs spēļu sfērā.

    1kārt : faktiski klāstero "spēļu istabas" ietvaros tikai MMORPG, tādēļ, ka FPSiem/Racingiem parasti istabā ir relatīvi mazs spēlētāju skaits. Ja nemaldos, WoWam vienam realmam bija 1 backends un vairāki frontendi. Parasti tādos gadījumos spēle izmanto atsevišķu DB, kuru var arī load balancēt (klasikais MU Online izmanto MS SQL). CSam un lielākai daļai spēļu visa "loģika" ir iekš servera atmiņas dēļ latency palielināšanās pie ārēju resursu fetchošanas un jebkura pieklājīga kaste "pavelk" vienu istabu.

    2kārt : open source risinājumi spēļu risinājumiem nav, jo lielākā daļa no jamiem ir propietary protokolu, kuru nevienam nav iekāriens load balancēt un jamos relīzot ir PITA dēļ patentētiem protokoliem.

    3kārt : load balancēt var Layer 4 līmenī, Layer 7 load balancings / failovers ir stipri dārgāks "resursu ziņā" (ar papildus iespējām, t.sk. gudrā komunikācija ar backendiem (health checki, HTTP keep-alive utt). Attiecas uz 1ajā punktā minētajām spēlēm, kur ir atsevišķs backends, kurš storē loģiku. Izmantojam iptables, packet filter vai kādu no h/w dedicated h/w balanceriem.

    4kārt Visi FPS hostingi griežās uz to, ka kastei ir vairākas IP adreses, uz kurām arī bindo atsevišķus serverus. Tā uz vienas kastes var griezt ntos FPS serverus. Tēmas autoram prbl ir vai nu mājas pieslēgums (kur var ISP nedot vairākas IP adreses) vai arī žēl pāris Ls par IP adresēm (kaut gan jebkurš load balanceris resursu ziņā apēd vairāk par pāris Ls), as nezinu nevienu .lv DC, kas nedotu pāris IP par ~2 Ls . Ar lielāku adrešu apgabala alokāciju var rasties problēmas, as RIPE neļauj lieki allokēt IP adreses :)

  2. Brīvā improvizācija par tēmu

    /**
    Izpilda vaicaajumu un pie katras rindas izpilda callback. 
    Man naff ne jausmas kaa php kaut ko asinhroni izpildiit, taadeelj 
    risinaajums principaa ir bezjeedziigs, tiiri pirkstu virinaashanai.
    principaa izmanto globaalo mysql linku, kas ir patizli, bet man ir lauziens 
    rakstiit visu mysql wrapperi funkcionaali, kas savukaart dotu shaadaas taadas 
    priekshrociibas. Principaa uzskatu, PHP prieksh FP sachko.
     Demonstree teoreetiski shaadads funkcionaalaas
    programeeshas iespeejas: closures, anoniimaas funkcijas :)
    Taa kaa man naff php uz datora un ir lauziens instaleet, tad kods naff notesteets.
    (php kauchkur jaavelk, jaakompileee, etc... ). lauziens.
    Laidiisies tikai uz 5.3++ 
    izmantoshanas piemeers vareetu buut shaads:
     super_q("SELECT * FROM TABLE", function ($data) { 
                                       echo "<tr>";
                                       $row = function($item){
                                         echo "<td>" . htmlspecialchars($item) . "</td>";
                                       }
                                       array_walk($row, $data);
                                       echo "</tr>";
                                     },
                                     function (){
                                       echo "<table>";
                                     }, function (){
                                       echo "</table>";
                                     }, function ($error, $number){
                                       ECHO "EPIC FAIL($error)[$number]"; 
                                     });
    */
    function super_q($query, $onData, $onStart = NULL, $onEnd = NULL, $onFail = NULL){
    $result = mysql_query($query);
    if ($onFail){
       $fail = function() { 
         $onFail(mysql_error(), mysql_errno());
       }
    } else {
      $fail = function() { }
    }
    if ($onStart){
      $start = function () { $onStart(); } 
    } else {
      $start = function () { } 
    }
    if ($onEnd){
       $end = function () { $onEnd(); }
    } else {
      $end = function() { }
    }
    if $result === false {
       $fail;
    }
    $started = false;
    $walk_mysql = function (){
     while($row = mysql_fetch_assoc($result)){
      $onData($row);
     }
    }
    $start();
    $walk_mysql();
    $end();
    }
    

     

    es gan taisiitu OOP variantaa, as tad var ieimplementeet interfeisus itereeshanai etc, kas paveertu shaadas smukas iespeejas...

    <?php 
    foreach(new Query("SELECT * FROM TABLE") as $row){
      var_dump($row);
    }
    if (count(Query("SELECT count(*) FROM table")) > 0){
      echo "YO";
    }
    ?>
    

  3. Kāds registry ?

    Ja izmantojam ietvaru, izmantojam ietvaru DB abstrakcijas klasi, a tā neredzu jēgu wrappot PDO - pie inicializācijas iebāžam konteinerī (aļa registry pattern) ar visu DSN un tālāk strādājam ar tiešu. Var uztaisīt delegāta / singleton miksējumu un rullēt tā.

  4. !!!Variaabljus eskeipot ar HtmlSpecialChars()

    Like

           $tqq=mysql_query("SELECT * FROM themes WHERE id=".S($t_id)) or exit;
    
           $data1 = mysql_fetch_assoc($tqq);
           echo '  Rediģēt tēmu:<br />
    
           <form name="input" action="/addtheme/" method="post">
                   Tēmas nosaukums:<br />    <input type="text" name="t_name" value="'.htmlspecialchars($data1['t_name']).'" size="20" /><br />
                   Tēmas autors:<br />    <input type="text" name="t_author" value="'.htmlspecialchars($data1['t_author']).'" size="20" /><br />
                   Tēmas saturs: <br /><textarea id="t_content" tabindex="3" rows="10" cols="50%" name="t_content"" >' . htmlspecialchars($data1['t_content']) . '</textarea><br />
                   <br /><input type="submit" value="Apstiprināt" />
           </form>
           <form>
                   <input type="submit" value="Atcelt" action="">  '; 
    

  5. Maz iespējams, ka GarmTech tagad izmanto safemode.

    Šī opcija, kā PHP drošības palielināšanas meģinājums ir jau novecojusi un vispār vairs nebūs pieejama PHP6 versijās.

    Tagad vairāk tiek izmantots suhosin vai nu visi PHP piepasījumi HTTP serveram tiek apstradāti pēc suPHP metodes (kā bijušais phpsuexec).

    suhosin iipashi neko nepaliidz shared hosting`aa, kur lielaaakaa probleema ir tas, ka ir jaanojailo klients un nedriikst ljaut vinjam tikt pie citu klientu datiem.

    Safe mode `n` co sax bai default :>

    suPHP balstaas uz CGI => performance sax haard.

    Labaaks keiss ir chrootots FastCGI process un mod_fcgi :>

    Ja ir liikas rokas sakonfot FastCGI apache, tad labaak izmantot mpm-itk moduli + mod_php, kas visu apache child`u seteuid(2) un jams smuki griezjaas ar klienta juuzera `n` grupas privileegjijaam, pieliekot klaat MAC pasaakumu klients nekur aarpus saviem datiem netiek un nekaadas liikus kodus, kas ljaut noexploiteeties liidz r00t, nevar izpildiit.

    Tomēr, lieliem projektiem ar biežiem pieprasījumiem datubāzei (it īpaši ierakstīšanai) labāk lietot MySQL.

    Lieliem projektiem ar biezjiem pieprasiijumiem datubaazei (it iipashi ierakstiishanai) labaak noalgot DBA, jo pat MySQL ir jaapiekonfo prieksh write-heavy workload`a. SQLite rox prieksh daudz kaa (hint: SQLite datubaazes arii var tureet RAMaa un ar maziem datu apjomiem daljaa keisu izkozj MySQL performaces jautaajumos).

    SQLite arī ir daudz stabils, nekā MySQL/PostgreSQL...jo tie ir atsevišķi serveri ar iespējamo savu downtime.

    s/serveri/daemons/

    SQLite var iizii nokorupteet jamo caur DRDB / NFS lietojot

    Galu galaa SQLite datubaaze ir fails un jams dependojas no failsisteemas stabilitaates :>

    Tad ar SQLite tas viss darbosies? Un phpmyadmin būs?

    PHPMyadmin ir tikai MySQL datubaazeem, tev ir jaajuuzo kaads no SQLite web frontendiem

     

     

     

    Respectah,

    K^2

  6. No sākuma iemācies kā SQL kverijus rakstīt / optimizēt, tad pie memkeša ķeries.

     

    SELECT u.username FROM online o
    INNER JOIN users u ON u.id = o.user_id 
    

    to savukārt pārtaisot uz

    <?php
    if(!$online = memcache_get("online")){
      $online = $pdo->query("SELECT u.username FROM online o
    INNER JOIN users u ON u.id = o.user_id")->fetchAll();
      memcache_set("online", $online, 600);
    }
    

  7. kirils savu sms.id.lv tur noslēpumā un pēc disclosed info tur arī h/w ir vajadzīga (prbl exploito bugu kkur).

    daži gudrenieki darbojas uz bifri / bites tālruni ar unlimited SMS kā GSM modemu un sūta caur jamo(prbl jūzo linuxi `n` kanel).

    Subsetam no mob. tel. numuriem var sūtīt e-pastu, kas redirektējas uz sms. Bet, piem, lmt nevar no numura e-pastu izpīpēt.

    Vēl var izmantot operatoru web formas un lauzt captchas ar OCRu . Principā, iespējams, bet lēni :)

     

    Daļa no mārketinga (kopš kura laika spams ir mārketings) kantoriem piedāvā sūtīt sms no jamo lapas, vācot "mārketinga" datubāzi (rofl).

  8. es paņemtu supervisord (http://supervisord.org/) uzrakstītu php/whateva skriptu, kas sēž atmiņā un dara visu, ko vajag.

     

    mazā intervālā laižot cron var uzrauties uz race conditioniem u.c. jaukām lietām.

     

    marcis, alx.f1.lv nav apskatīta tāda jauka lieta kā procesu restarts, startēšana pie reboota, monitorings (ja nu pakaras, nosprāgst utt). Me personīgi screen izmanto, lai pie norautām ssh sesijām varētu restorēties atpakaļ.

  9. Te daži jauc valodu ar frameworku.

    IMO, gan ntajos PHP(Zend, CakePHP, CodeIgniter, Kohana..), gan ntajos Python(Django, web.py, Zope), gan ASP.NET, gan ntajos Javas(strutas, spring, wickets), gan ntajos ruby (ķipa Rails) freimworkos var realizēt +/- to pašu, mainās tikai izstrādes ātrums atkarībā no valodas.

    Un stateless / stateful valodas (php/python vs java / asp.net) nav liekamas vienā maisā - izmantošanas profils ir dažāds.

×
×
  • Create New...