Entrades

S'estan mostrant les entrades amb l'etiqueta servidor

PHP vs Node.js: rendiment en concurrència

Bo, doncs per motius laborals i familiars he estat un poc absent (del bloc), però ja aprofitant unes proves que he fet al treball, vaig a mostrar els resultats obtesos. En principi, com sempre li he tingut mania al javascript, pensava que seria més lent que el php, però pareix ser que l'asincronisme fa que en determinades coses vaja molt més ràpid. La prova consisteix en recorrer un parell de taules enormes (400k registres) i fer alguns càlculs. He fet les proves amb el benchmarking de apache (ab), anem a veure el codi, he obviat les consultes per simplificar: PHP $sql=''; $preguntesResult =  mysql_query($sql) or die('Consulta fallidaA: ' . mysql_error()); $sqlrespostes= '' $respostesResult =  mysql_query($sqlrespostes) or die('Consulta fallidaB: ' . mysql_error()); while($line = mysql_fetch_array($preguntesResult, MYSQL_ASSOC)){   $preguntes[]= $line; } foreach ($preguntes as $pregunta) { } $cadena = ""; while($line = mysq...

Utilitzar un gestor de plantilles en php: Twig

Imatge
Tenia un parell de projectes a la vista, un personal i un altre per a una empresa en php, ambdós fallats ;) vaig començar a fer-los, i vaig pensar en utilitzar una cosa que tenia pendent: un gestor de plantilles en php. Em vaig decidir a utitzar Twig (no per res, però li tenia mania a smarty per què és el que gasta Vicent-Santi-programadorphp.es). Em va sorprendre com n'era de fàcil d'utilitzar, per a realitzar una aplicació normal he utilitzat 3 "capes": Scripts d'accés a la base de dades mysql en php, cada petició tornarà el resultat en JSON Scripts php que faran el processaran la plantilla La plantilla on es poden mesclar diferents llenguatges: Html,css, javascript i "Twig". Per al disseny he gastat bootstrap i com a framework javascript: jquery. Per a instal·lar el Twig només farà falta baixar-lo en una carpeta i enllaçar-lo a la nostra aplicació. Anem a fer per exemple la pantalla de login: <?php require_once 'Twig/Autoloa...

Per fi!, tema dominat: mysql asincron en node.js

Escoltant marea (no té res a veure, però així indique preferències musicals ;)), he trobat la solució al problema dels posts anteriors. Resulta que la funció query del paquet és asíncrona, és a dir que no se pot saber quan s'executarà, però serà quan s'acabe la funció que la crida. Aleshores el que hem de fer és no retornar la resposta fins que no s'execute el callback. I així ens evitem el problema, si has estat seguint el post entendràs la consulta i tot: function fservidor(request, response){ var resXML="<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?><resposta>"; function frequeston(){   // El codi 200 vol dir què la petició ha segut correcta, i enviem la resposta en text pla.    response.writeHead(200, {          'Content-Type': 'text/plain'       }); //end writehead  }//end frequeston request.on("end", frequeston);  var client = mysql.createConnection('mysql://'+user + ':'+pass+...

L'estotèric abast de les variables en node.js

Com ja comentava en l'anterior post, ja duc un temps barallant-me amb handlers i demés malea del node.js. Crec que he descobert un altre problema de node.js. L'abast de les variables. Si jo definisc una variable en una funció, les modificacions fetes en la variable en les funcions definides dins no quedaran guardades . Trobe què és molt més fàcil veure-ho amb un exemple, si jo tinc el següent codi paregut als exemples anteriors (recordem la taula de personatges del joc de rol simple): var resXML="<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?><resposta>";    var i=0;    client.query(action, function getSQL(err,result,fields){      //console.log(fields);      if (err){        console.log("Error: " + err);      }//if      resXML = resXML + "<" + fields[0].table + ">";      for(i=0;i<result.length;i++){   ...

Handlers d'errors en node.js quina bogeria ;)

Després de dos dies tornat-me varilla amb els handlers d'error en node.js, al final, quasi de casualitat he descobert que passa. Imaginem que vull connectar a una base de dades: function doLogin(){   var client = mysql.createConnection('mysql://'+user + ':'+pass+'@'+server+'/'+database);   client.connect();  }//function doLogin La funció connect pot fallar en cas que els paràmetres siguen incorrectes, no hi haja connexió... si eixe error no és capturat, tanca el programa (tancant el servidor). Primer proví amb try catch, herència d'altres llenguatges no tant moderns ;) i no, no vaig aconseguir capturar l'error. Per tant vaig llegir que la millor cosa que podia fer en javascript (node.js) era afegir  una funció callback (que s'executa en cas d'error, i passada com a paràmetre). La funció ha de ser algo així:   function errResult(err,result){   if (err != null) {          berror = true;    }   else{ ...

Accedit a un webservice des de windows phone

Imatge
Bé, per fi les meues obligacions m'han deixat un ratet per fer el que volia fer fa molt de temps, una aplicació de windows phone que accedira al webservice qeu vam crear en node.js farà mig any. No vaig a entrar en com s'instal·la el sdk per què és abaixar un downloader  de la web de microsoft i ja està. A més, el sdk és gratuït, et baixa la versió de Visual Studio 2010 Express (gratuïta) i tot. La idea era, quan s'aprete un botó, connectar-se a un webservice, que ens retornarà un xml, processar-lo i mostrar-lo en un grid ;) Ha segut ben farragós, per què programar per a dispositius mòbils no és com programar en escriptori, però ha estat divertit... ;) Anem per feina. Primer de tot l'aspecte visual, afegirem un botó i un grid: Ara anem a programar que farà el botó, ja què obtindre un xml remot, no és difícil, però tampoc és tant fàcil com pareix, ja què windows phone no permet les connexions sincrones, i per tant hem de posar un handler per a quan es complete la de...

De moment, el tamany si importa, o almenys la potència

Imatge
He tingut que canviar d'equip per a la programació de la base de dades. He gastat mysql. No és què el gestor de bases de dades siga molt exigent. El problema que he tingut és amb el client que han elaborat Mysql Workbench. Em fa gossera buscar un altre i este és el·laborat pels mateixos que fan Mysql. He canviat al fix i problema resolt ;) Doncs be, el client al meu portàtil reciclat es queda penjat continuament (més que l'eclipse, què ja és dir), trobe que per a fer desenvolupament una mica seriosos no podré gastar-lo i hauré de canviar de màquina. Ja veurem que em duu el destí. De moment he dissenyat la super base de dades (mode ironia on) que gastaran les aplicacions mòvils. Consistirà en una taula única de personatges d'un joc de rol molt simple: En pròximes entrades aniré utilitzant esta taula, la idea és que el servidor la retorne a  una aplicació client als diferents dispositius mòvils. Una vegada completada la base de dades (mode ironia on), anem a progra...

Creació d'un servidor simple amb node.js

Imatge
Continuem amb el vell portàtil (haurem de canviar més avant), però per a l'aplicació servidor, de moment sobra. Amb la llibreta (aka notepad) de windows, y la consola de msdos anirem apanyat. Primer de tot necessitarem un servidor, he triat node.js per què, com ja ho vaig dir en un altre post, m'ho va recomanar el meu amic Jaume. La ventatja? Fàcil instal·lació, configuració, programació (Javascript)... Per a instal·lar anem ací i ens baixem la versió corresponent al nostre sistema, instal·lem, i ja està, no hem de fer res més ;) Ara crearem el nostre programa en javascript (els comentaris, són autoexplicatius ;)): //Necessari per a connexions http var http = require("http"); //Creem el servidor, i quan "s'acabe" la petició, enviem al client la resposta, el missatge "<xml> <resposta>OK</resposta></xml>" http.createServer(function (request, response) {   //Capturem el final de la petició, i creem una funció que ...