• úvod
  • témata
  • události
  • tržiště
  • Nepodařilo se načíst diskuzi.

  • diskuze
  • nástěnka
  • přihlásit
    registrace
    ztracené heslo?
    ANGEL333node.js - Evented I/O for V8 JavaScript

    Věříte, že nějaký webapp framwork postavený na node.js (Express?) bude v budoucnosti rozšířený podobně jako jsou nyní např. Django, CakePHP, Rails, Zend, atd..?

    55 hlasy od 55 respondentů

      Relativně nové server-side javascriptové API. Hlavní předností je, že je event-driven a neblokující. Již nyní obsahuje implementaci protokolů HTTP, TCP, DNS, rozhraní pro práci s procesy, soubory, atd..

      Instalace je velmi jednoduchá, jediná závislost je Python, potom node.js nainstalujete jako standardní program.

      Odkazy:


    • Oficiální web: http://nodejs.org

    • Přednáška od Ryana Dahla (autor node.js)

    • Git repozitář: http://github.com/ry/node
    • rozbalit záhlaví
      KOC256
      KOC256 --- ---
      SUCZKER:
      Jsi dost tajemný...

      Jaká je tedy nejlepší praxe na úpravu toho řádku, když waitUntil: 'load' není to pravé...:
      await page.goto('https://example.com/Tools/?name=' + nick + '&loop=' + loop + '&submit=Filter', {waitUntil: 'load'});

      Patří do parametru něco jiného?
      SUCZKER
      SUCZKER --- ---
      KOC256: To si zrejme load mysli. Nevim, co se snazis scrapovat, ale udalost "document.load" neni to samy, co udalost "document.ready", jen tak na okraj. Bylo by asi vhodny si dokument pote, co skonci load, nekam ulozit, aby bylo jisty, ze tam skutecne je to, co hledas.
      KOC256
      KOC256 --- ---
      SUCZKER:
      Dik... ale proc tam je teda toto:
      {waitUntil: 'load'}

      Myslel jsem ze to resi ten load. Pokud by load dobehl, tak tam třen prvek urcite je. Leda ze by dobehl ale vratil prazdnou stranku (bila streanka) a load by se myslel ze tedy hotovo...
      SUCZKER
      SUCZKER --- ---
      KOC256: process.on('unhandledRejection', (err) => { ... }) asi znas, to pisu jenom tak do foroty. Celou porceduru mas urcite oznaceno jako async, takze to problem nebude.

      Co ctu dokumentaci k waitforselector, tak pokud se proste neobjevi markup, kterej by odpovidal selectoru behem danyho timeout (defaultne asi tech 30000ms, ale nastavitelne pomci druhyho parameteru options), tak to proste throwne. Rekl bych, ze proste na strance se behem tech 30 sekund ten selektor neobjevi nebo tam proste nikdy nebyl.

      Je to prijatelne vysvetleni ?
      KOC256
      KOC256 --- ---
      Jinak ten chrome na linuxu oproti phantomu+casperu na widlich je 2x pomalejsi... (3 vs 7 minut).
      Nevim na kolik je to srovnatelne, protoze to muze byt klidne i vykonem.
      Win 10, 4 jadra i, 12GB RAM
      vs
      Debian jessie (VPS), 2 jadra, 1GB RAM (RAm je dost), procak obcas na 100%
      KOC256
      KOC256 --- ---
      
      for (loop of [2, 3, 5, 7]) {
      	try {
      		await page.goto('https://example.com/Tools/?name=' + nick + '&loop=' + loop + '&submit=Filter', {waitUntil: 'load'});
      	} catch (error) {
      		console.log('ERROR TU');
      		continue;
      	}
      console.log('17');
      	await page.waitForSelector('textarea:not(#support_body)');
      console.log('18');
      ...
      


      mám to v rámci webserveru a chci aby při nedostupnosti (timeout) jedné URL aby mi to skočilo na další... Takže otrocky takto všude dávám try+catch. Ale stává se mi, že i když mi to projde tím page.goto(), tak mi to spadne na:
      UnhandledPromiseRejectionWarning: Error: waiting failed: timeout 30000ms exceeded
      v page.waitForSelector().



      - Nějak jsem hloupě doufal, že waitUntil: 'load' se tam dává, aby se čekalo na load...
      - Mám nastaveno await page.setDefaultNavigationTimeout(3000);, což ale platí jen pro goto().

      Nějaké know-how k tomuto pls?
      KOC256
      KOC256 --- ---
      Jinak drobné zastavení nad rozdíly Puppeteer a CasperJS... ...pokud by to někoho zajímalo.


      C:
      var txt = casper.fetchText('textarea');
      P:
      const txt = await page.$eval('textarea:not(#support_body)', el => el.value);

      Protože ve stránce jsou dva prvky textarea a z toho ten #support_body je neviditelný a ten co chci použít nemá žádný identifikátor (ani nadřazený). Vyplývá z toho, že Chrome pracuje i s neviditelnými elementy.


      C:
      nicks.forEach(function(nick) {
      P:
      for (nick of nicks) {


      C:
      pageSettings: { loadImages: false, }
      P:
      await page.setRequestInterception(true);
      page.on('request', request => {
      	if (request.resourceType() === 'image')
      		request.abort();
      	else
      		request.continue();
      })



      const nicks = [
      	//'pepa'
      	,'koc256'
      	,'karel'
      ];

      C:
      projde
      P:
      hodí chybu - vadí mu ta první čárka


      U Chrome se mi líbí, že se nekonečně nezanořuje syntaxe...


      A jeden z hlavních je že PhantomJS je jeden velký problém s instalací a provozováním... :(
      KOC256
      KOC256 --- ---
      SUCZKER: code
      ...
      /code
      BULHI
      BULHI --- ---
      SUCZKER: to je nyx feature, syntax highlighting
      SUCZKER
      SUCZKER --- ---
      a ja se zeptam naprosto debilne a offtopic, jak sem dostavate ty barevny logy z terminalu ??
      KOC256
      KOC256 --- ---
      MARYO:
      zatim jsem si vzal od Forpsi VPS na 2 mesice zdarma. Jinak stoji 25kc/mesic. To na to hrani mi i stoji za to...
      MARYO
      MARYO --- ---
      KOC256: Nevim ale jestli to pujde nainstalovat na tom ARM :-)
      KOC256
      KOC256 --- ---
      MARYO:
      Díky.
      Dneska jsem si udělal základní kostru a zatím OK. Jelikož phantom byl fakt problém. Pořád něco nešlo a šel opakovaným rychlým refreshem shodit. Teď už jen přepsat aplikaci z caspera :)
      MARYO
      MARYO --- ---
      BTW já bych šel spíš do https://github.com/GoogleChrome/puppeteer od Googlu, ten běží na headless Chrome.
      MARYO
      MARYO --- ---
      Ten server bezi na ARM a ten phantomjs-prebuilt pro to nema binarku.
      Potom bych zkusil
      GitHub - fg2it/phantomjs-on-raspberry: Phantomjs for raspberry pi
      https://github.com/fg2it/phantomjs-on-raspberry
      nebo
      GitHub - ApioLab/phantomjs-2.1.1-linux-arm
      https://github.com/ApioLab/phantomjs-2.1.1-linux-arm
      KOC256
      KOC256 --- ---
      Myslím, že je problém, tu:
      Unexpected platform or architecture: linux/arm

      Ale našel jsem jen verzi pro PÍčku a ta mi nefungovala...
      KOC256
      KOC256 --- ---
      MARYO:
      Už jsem to zkoušel dříve a tedy výpis chyby...

      
      admin@NAS:/volume1/web/node$ npm install phantomjs-prebuilt -g
      npm WARN checkPermissions Missing write access to /volume1/@appstore/Node.js_v8/usr/local/lib/node_modules
      npm ERR! path /volume1/@appstore/Node.js_v8/usr/local/lib/node_modules
      npm ERR! code EACCES
      npm ERR! errno -13
      npm ERR! syscall access
      npm ERR! Error: EACCES: permission denied, access '/volume1/@appstore/Node.js_v8/usr/local/lib/node_modules'
      npm ERR!  { Error: EACCES: permission denied, access '/volume1/@appstore/Node.js_v8/usr/local/lib/node_modules'
      npm ERR!   stack: 'Error: EACCES: permission denied, access \'/volume1/@appstore/Node.js_v8/usr/local/lib/node_modules\'',
      npm ERR!   errno: -13,
      npm ERR!   code: 'EACCES',
      npm ERR!   syscall: 'access',
      npm ERR!   path: '/volume1/@appstore/Node.js_v8/usr/local/lib/node_modules' }
      npm ERR!
      npm ERR! Please try running this command again as root/Administrator.
      
      npm ERR! A complete log of this run can be found in:
      npm ERR!     /var/services/homes/admin/.npm/_logs/2018-02-06T08_13_18_993Z-debug.log
      admin@NAS:/volume1/web/node$ sudo npm install phantomjs-prebuilt -g
      Password:
      /volume1/@appstore/Node.js_v8/usr/local/bin/phantomjs -> /volume1/@appstore/Node.js_v8/usr/local/lib/node_modules/phantomjs-prebuilt/bin/phantomjs
      
      > phantomjs-prebuilt@2.1.16 install /volume1/@appstore/Node.js_v8/usr/local/lib/node_modules/phantomjs-prebuilt
      > node install.js
      
      PhantomJS not found on PATH
      Unexpected platform or architecture: linux/arm
      It seems there is no binary available for your platform/architecture
      Try to install PhantomJS globally
      npm ERR! code ELIFECYCLE
      npm ERR! errno 1
      npm ERR! phantomjs-prebuilt@2.1.16 install: `node install.js`
      npm ERR! Exit status 1
      npm ERR!
      npm ERR! Failed at the phantomjs-prebuilt@2.1.16 install script.
      npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
      
      npm ERR! A complete log of this run can be found in:
      npm ERR!     /root/.npm/_logs/2018-02-06T08_14_29_381Z-debug.log
      admin@NAS:/volume1/web/node$
      
      KOC256
      KOC256 --- ---
      MARYO: zkusim jeste ale i ten prebuilt mi hazel nejake chyby.
      MARYO
      MARYO --- ---
      Prerequisites
      Node.js >= 0.8
      PhantomJS >= 1.9
      CasperJS >= 1.0

      npm install phantomjs-prebuilt
      npm install casperjs

      pripadne

      npm install phantomjs-prebuilt -g
      npm install casperjs -g
      KOC256
      KOC256 --- ---
      Zacal jsem si hrat s phantomjs a casperjs na lokale (windows). Chtel bych to dostat na server do prostredi webu a tak jsem si na Synology NAS nahral NODE.JS v8.

      Pak pres SSH
      npm init -y
      npm install express spookyjs

      Hello world! priklad z https://www.npmjs.com/package/express mi funguje. (node server.js)

      Ale pokud zkusim spustit priklad ze spookyho https://github.com/SpookyJS/SpookyJS/blob/master/examples/hello.js
      jako: node hello.js
      Tak dostanu chybu:
      
      admin@NAS:/volume1/web/node$ node hello.js
      events.js:182
            throw er; // Unhandled 'error' event
            ^
      
      Error: spawn casperjs ENOENT
          at exports._errnoException (util.js:1024:11)
          at Process.ChildProcess._handle.onexit (internal/child_process.js:192:19)
          at onErrorNT (internal/child_process.js:374:16)
          at _combinedTickCallback (internal/process/next_tick.js:138:11)
          at process._tickCallback (internal/process/next_tick.js:180:9)
          at Function.Module.runMain (module.js:607:11)
          at startup (bootstrap_node.js:158:16)
          at bootstrap_node.js:575:3
      admin@NAS:/volume1/web/node$
      


      Pokud si spookyho hodim do expressu, tak opet chyby...
      Na netu neco k tomu pisou ale nenasel jsem / nepochopil jsem co konkretne bych mel udelat. Rady jako restart pripadne npm install npm update vyzkouseny --> nic...

      Nejaky napad?
      FEDY
      FEDY --- ---
      ahoj, zase to zkusim, ve vire, ze si snad zachvili sam odpovim ... :-)

      stale stejny projekt - mereni SNMP. grafy uz funguji, jsou supr, jen jsem na nich odhalil, jak mi to blbe funguje ...

      pouzivam knihovnu net-snmp ( https://www.npmjs.com/package/net-snmp ) , generuju tisice requestu /s a chodi mi nazpet jen cast odpovedi. resp. na sitovku prijdou vsechny (vidim v nachytanem provozu ve wiresharku), ale uz zrejmne nejak nedorazi zpet do socketu. countery netstat -s "24392304 packets to unknown port received" docela dost naskakuji , coz bude jiste ona pricina. packety se vraci na port, ze ktereho sel request, ale zrejmne nektere nedorazi. tipuju, ze uz muze byt socket zavreny, ale je to takova rychlost, ze nevim jak to spravne hledat. vsechny mozne tweaky kernelu jsem zkousel (bezi to na linuxu)
      sysctl net.ipv4.ip_local_port_range="10000 61000"
      sysctl net.core.somaxconn=32768
      sysctl net.core.netdev_max_backlog=10000
      sysctl net.core.rmem_default=8388608
      sysctl net.core.wmem_default=8388608
      sysctl net.core.rmem_max=26214400
      sysctl net.core.wmem_max=26214400

      sitovka ma 0 erroru (musi , kdyz pozadovane odpovedi tcpdumpem chytim) , netstat counter vsak stale naskakuje. timeout pro SNMP mam v radech sekund, ve wiresharku vidim, ze odpoved prichazi nazpet po 200ms, ale zrejme je socket uz zavreny. nestalo se vam nekomu neco podobneho ?

      pripadne predem dik.
      Kliknutím sem můžete změnit nastavení reklam