SlideShare a Scribd company logo
1 of 28
Download to read offline
Mais do que um framework web bonitinho




                                         marcelnicolay.com
sobre mim
marcelnicolay.com
quatix.com.br
academiatech.com.br




                      marcelnicolay.com
Tornado é um framework web non­blocking, escrito para lidar com milhares de conexões
simultâneamente.
E que mais?

   URL Spec
   Template
   Locale
   Request Handler
   HTTP Server




                                                                         marcelnicolay.com
ipr traoilo
mot ond.oop
ipr traowb
mot ond.e

casMiHnlrtraowbRqetade)
ls   anade(ond.e.eusHnlr:
  dfgtsl)
   e   e(ef:
      sl.rt(Hlo wrd)
       efwie"el, ol"

i _nm_ = "_an_:
 f _ae_ = _mi_"
   apiain=traowbApiain[
    plcto    ond.e.plcto(
      ("" MiHnlr,
       r/, anade)
   ])
   apiainlse(88
    plcto.itn88)
   traoilo.Oopisac(.tr(
    ond.oopILo.ntne)sat)




                            marcelnicolay.com
mas é só isso?
 não...




                 marcelnicolay.com
background
O que você sabe sobre:

   Non­blocking I/O?
   Callback pass style?




                          marcelnicolay.com
non­blocking I/O
É um forma de processamento de entrada/saída (input/output) que não bloqueia o
processo, permitindo executar outras coisas em paralelo.

Operações de entrada e saída, como leitura e escrita, podem ser extremamente lentas em
comparação com o processamento.

Por exemplo, durante uma operação de disco que leve 10 milisegundos para ser realizada,
um processador de 1 gigahertz pode processar até 10milhões de instruções.




                                                                          marcelnicolay.com
non­blocking I/O
Typical flow of the synchronous blocking I/O model




                                                     marcelnicolay.com
asynchronous I/O
Typical flow of the asynchronous non­blocking I/O model




                                                          marcelnicolay.com
non­blocking I/O
Everything in unix is a file descriptor

incluindo:

    sockets
    connections




                                          marcelnicolay.com
sockets operations


        client       server




                              marcelnicolay.com
synchronous accept




                     marcelnicolay.com
asynchronous accept




                      marcelnicolay.com
callback passing style
dfsatfo:
e  tr(o)
 #d sufwt foadwe dn cl tenx fnto
   o tf ih o n hn ow al h et ucin
 sufclbc=etse,dt=o)
  tf(alaknx_tp  aafo;

dfnx_tpbr:
e  etse(a)
 #cl mr_tf t prebr
   al oesuf o as a
 mr_tf(alakls_tp dt=a)
  oesufclbc=atse, aabr

dfls_tpbz:
e  atse(a)
 #sn tersos
   ef h epne
 sn_epnebz
  edrsos(a)

 #e orhnlrko w aedn
  lt u ade nw e r oe
 fns(
  iih)




                                    marcelnicolay.com
IOLoop
An I/O event loop for non­blocking sockets.

   core da camada de rede do tornado
   rápido e fácil de usar
   uma instância por processo
   cross­plataforma
   código aberto
   client libraries & server applications




                                              marcelnicolay.com
IOLoop
ipr ero
mot rn
ipr fntos
mot ucol
ipr sce
mot okt
fo traoipr ilo
rm ond  mot oop

dfhnl_oncincneto,ades:
e  adecneto(oncin drs)
  pit"e cneto..
   rn nw oncin."

dfcneto_ed(ok f,eet)
e  oncinraysc, d     vns:
  wieTu:
   hl  re
     ty
      r:
        cneto,ades=sc.cet)
         oncin  drs    okacp(
     ecp sce.ro,e
      xet okterr   :
        i eag[]nti (rn.WUDLC,eroEGI)
         f .rs0  o n eroEOLBOK rn.AAN:
           rie
            as
        rtr
         eun
     cneto.ebokn()
      oncinstlcig0
     hnl_oncincneto,ades
      adecneto(oncin     drs)

sc =sce.oktsce.FIE,sce.OKSRA,0
ok   oktsce(oktA_NT oktSC_TEM  )
sc.escotsce.O_OKT sce.ORUEDR 1
okstokp(oktSLSCE, oktS_ESAD, )
sc.ebokn()
okstlcig0
sc.id(" 88)
okbn(", 88)
sc.itn18
oklse(2)

i_op=ilo.Oopisac(
olo   oopILo.ntne)
clbc =fntosprilcneto_ed,sc)
alak   ucol.ata(oncinray  ok
i_opadhnlrsc.ieo) clbc,i_opRA)
olo.d_ade(okfln(, alak   olo.ED
i_opsat)
olo.tr(




                                         marcelnicolay.com
IOStream
Utility classes to write to and read from non­blocking files and sockets.

   faz todo o "trabalho sujo" para você
   também usado em client & server




                                                                            marcelnicolay.com
IOStream: a very simple HTTP client
fo traoipr ilo
rm ond  mot oop
fo traoipr isra
rm ond  mot otem
ipr sce
mot okt

dfsn_eus(:
e  edrqet)
  sra.rt(GT/HT/.Hs:finfe.o"
   temwie"E  TP10rnot rededcmrnrn)
  sra.edutl"rnrn,o_edr)
   temra_ni(" nhaes

dfo_edr(aa:
e  nhaesdt)
  haes={
   edr     }
  frln i dt.pi(":
   o   ie n aaslt"rn)
     prs=ln.pi(:)
      at    ieslt""
     i lnprs = 2
      f e(at) = :
        haesprs0.ti(]=prs1.ti(
         edr[at[]srp)  at[]srp)
  sra.edbtsithaes"otn-egh],o_oy
   temra_ye(n(edr[CnetLnt")    nbd)

dfo_oydt)
e  nbd(aa:
  pitdt
   rn aa
  sra.ls(
   temcoe)
  ilo.Oopisac(.tp)
   oopILo.ntne)so(

s=sce.oktsce.FIE,sce.OKSRA,0
   oktsce(oktA_NT oktSC_TEM )
sra =isra.Otems
tem   otemISra()
sra.onc("rededcm,8) sn_eus)
temcnet(finfe.o"  0, edrqet
ilo.Oopisac(.tr(
oopILo.ntne)sat)
tornado.stack_context
permite preservar o estado atual para ser usado em um outro contexto de execução
@otxlbcnetaae
cneti.otxmngr
dfdeo_ro(:
e  i_nerr)
  ty
   r:
     yed
      il
  ecp Ecpin
   xet xeto:
     lgigerr"xeto i aycrnu oeain,x_noTu)
      ogn.ro(ecpin n snhoos prto"ecif=re
     ssei()
      y.xt1

wt Sakotx(i_nerr:
ih tcCnetdeo_ro)
  #Ayecpintrw hr *ri clbc adisdsnet*
    n  xeto  hon ee o n alak n t eedns
  #wl cuetepoest ei isedo sinn edesy
    il as  h  rcs o xt nta f pnig nlsl
  #i teilo.
    n h oop
  ht_letfthul clbc)
   tpcin.ec(r, alak
ilo.tr(
oopsat)




                                                                         marcelnicolay.com
tornado.gen
Não curtiu o 'callback passing style'?
casAycade(eusHnlr:
ls   snHnlrRqetade)
  @snhoos
   aycrnu
  dfgtsl)
   e   e(ef:
      ht_let=AycTPlet)
       tpcin  snHTCin(
      ht_letfth"tp/eapecm,
       tpcin.ec(ht:/xml.o"
                clbc=efo_ec)
                 alaksl.nfth

   dfo_ec(ef rsos)
    e  nfthsl, epne:
      d_oehn_ihrsos(epne
       osmtigwt_epnersos)
      sl.edr"epaehm"
       efrne(tmlt.tl)




                                         marcelnicolay.com
tornado.gen
Existe uma forma mais 'pythonica' de fazer isso...
casGnsnHnlrRqetade)
ls   eAycade(eusHnlr:
  @snhoos
   aycrnu
  @e.nie
   gnegn
  dfgtsl)
   e   e(ef:
      ht_let=AycTPlet)
       tpcin   snHTCin(
      rsos =yedgnTs(tpcin.ec,
       epne  il  e.akht_letfth
                     "tp/eapecm)
                      ht:/xml.o"
      d_oehn_ihrsos(epne
       osmtigwt_epnersos)
      sl.edr"epaehm"
       efrne(tmlt.tl)




                                                     marcelnicolay.com
timers
executar um callback na próxima iteração, ou após algum intervalo

   ioloop.add_timeout(deadline, callback)
   ioloop.remove_timeout(timeout)
   ioloop.add_callback(callback)




                                                                    marcelnicolay.com
tornado.httpclient.AsyncHTTPClient
An non­blocking HTTP client.
fo traoipr ilo,htcin
rm ond mot oop  tplet

dfhnl_eus(epne:
e  aderqetrsos)
  i rsos.ro:
   f epneerr
     pit"ro:,rsos.ro
      rn Err" epneerr
  es:
   le
     pitrsos.oy
      rn epnebd
  ilo.Oopisac(.tp)
   oopILo.ntne)so(

ht_let=htcin.snHTCin(
tpcin   tpletAycTPlet)
ht_letfth"tp/wwgol.o/,hnl_eus)
tpcin.ec(ht:/w.ogecm"  aderqet
ilo.Oopisac(.tr(
oopILo.ntne)sat)
tornado.platform.twisted
This module contains a Twisted reactor build on the Tornado IOLoop
ipr traopafr.wse
mot ond.ltomtitd
traopafr.wse.ntl(
ond.ltomtitdisal)
fo titditre ipr ratr
rm wse.nent mot eco




                                                                     marcelnicolay.com
tornado.websocket
WebSockets allow for bidirectional communication between the browser and server.
casEhWboktwboktWboktade)
ls   coeSce(esce.eSceHnlr:
  dfoe(ef:
   e   pnsl)
      pit"eSce oee"
       rn Wbokt pnd

   dfo_esg(ef msae:
    e  nmsaesl, esg)
      sl.rt_esg("o si:"+msae
       efwiemsaeuYu ad   esg)

   dfo_ls(ef:
    e  ncoesl)
      pit"eSce coe"
       rn Wbokt lsd




                                                                          marcelnicolay.com
tornado.netutil.TCPServer
A non­blocking, single­threaded TCP server.

fo traoipr ilo
rm ond mot oop
fo traoipr nttl
rm ond mot eui

casEhSre(eui.CSre)
ls coevrnttlTPevr:

   dfhnl_temsl,sra,ades:
    e  adesra(ef  tem drs)
      sl.sra =sra
       ef_tem  tem
      sl.ra_ie)
       ef_edln(

   df_edln(ef:
    e  ra_iesl)
      sl.sra.edutl'n,sl.hnl_ed
       ef_temra_ni(' ef_adera)

   df_adera(ef dt_n:
    e  hnl_edsl, aai)
      sl.sra.rt(Yusn:%'%dt_n
       ef_temwie'o  et s aai)
      sl.ra_ie)
       ef_edln(

i _nm_ = '_an_:
 f _ae_ = _mi_'
   sre =EhSre(
    evr  coevr)
   sre.itn20)
    evrlse(07
   ilo.Oopisac(.tr()
    oopILo.ntne)sat)




                                              marcelnicolay.com
Mais do que um framework bonitinho




                                     marcelnicolay.com
referências
 http://en.wikipedia.org/wiki/Asynchronous_I/O
 http://www.kegel.com/dkftpbench/nonblocking.html
 http://www.kernel.org/doc/man­pages/online/pages/man4/epoll.4.html
 http://scotdoyle.com/python­epoll­howto.html
 http://docs.python.org/2/library/select.html
 http://www.tornadoweb.org/documentation/index.html
 http://dabeaz.com/coroutines/Coroutines.pdf




                                                                      marcelnicolay.com

More Related Content

What's hot

JS Experience 2017 - Performance Web além do carregamento
JS Experience 2017 - Performance Web além do carregamentoJS Experience 2017 - Performance Web além do carregamento
JS Experience 2017 - Performance Web além do carregamentoiMasters
 
A Classe StringBuilder em Java
A Classe StringBuilder em JavaA Classe StringBuilder em Java
A Classe StringBuilder em JavaDevmedia
 
Introdução ao Framework Grails
Introdução ao Framework GrailsIntrodução ao Framework Grails
Introdução ao Framework GrailsBruno Catão
 
Gentoo por marcelo rocha
Gentoo por marcelo rochaGentoo por marcelo rocha
Gentoo por marcelo rochaSENAC RIO
 
Spock Framework
Spock FrameworkSpock Framework
Spock FrameworkIsmael
 
Threads 02: Acesso exclusivo e comunicação entre threads
Threads 02: Acesso exclusivo e comunicação entre threadsThreads 02: Acesso exclusivo e comunicação entre threads
Threads 02: Acesso exclusivo e comunicação entre threadsHelder da Rocha
 
Spock Framework 2
Spock Framework 2Spock Framework 2
Spock Framework 2Ismael
 

What's hot (9)

JS Experience 2017 - Performance Web além do carregamento
JS Experience 2017 - Performance Web além do carregamentoJS Experience 2017 - Performance Web além do carregamento
JS Experience 2017 - Performance Web além do carregamento
 
A Classe StringBuilder em Java
A Classe StringBuilder em JavaA Classe StringBuilder em Java
A Classe StringBuilder em Java
 
Comandos de controle de fluxo do php
Comandos de controle de fluxo do phpComandos de controle de fluxo do php
Comandos de controle de fluxo do php
 
Ruby On Rails
Ruby On RailsRuby On Rails
Ruby On Rails
 
Introdução ao Framework Grails
Introdução ao Framework GrailsIntrodução ao Framework Grails
Introdução ao Framework Grails
 
Gentoo por marcelo rocha
Gentoo por marcelo rochaGentoo por marcelo rocha
Gentoo por marcelo rocha
 
Spock Framework
Spock FrameworkSpock Framework
Spock Framework
 
Threads 02: Acesso exclusivo e comunicação entre threads
Threads 02: Acesso exclusivo e comunicação entre threadsThreads 02: Acesso exclusivo e comunicação entre threads
Threads 02: Acesso exclusivo e comunicação entre threads
 
Spock Framework 2
Spock Framework 2Spock Framework 2
Spock Framework 2
 

Similar to Tornado mais do que um framework bonitinho

Um Mundo Java Sem XML
Um Mundo Java Sem XMLUm Mundo Java Sem XML
Um Mundo Java Sem XMLiMasters
 
Slide curso metasploit
Slide curso metasploitSlide curso metasploit
Slide curso metasploitRoberto Soares
 
23º GURU-SP - Entenda LISP em 15 minutos
23º GURU-SP - Entenda LISP em 15 minutos23º GURU-SP - Entenda LISP em 15 minutos
23º GURU-SP - Entenda LISP em 15 minutospbalduino
 
Introdução ao processamento paralelo com o Grand Central Dispatch
Introdução ao processamento paralelo com o Grand Central DispatchIntrodução ao processamento paralelo com o Grand Central Dispatch
Introdução ao processamento paralelo com o Grand Central Dispatchflisolmaringa
 
Escrevendo modulos python com rust
Escrevendo modulos python com rustEscrevendo modulos python com rust
Escrevendo modulos python com rustBruno Rocha
 
Estrutura de linguagem C++
Estrutura de linguagem C++Estrutura de linguagem C++
Estrutura de linguagem C++Verônica Veiga
 
Raspador: Biblioteca em Python para extração de dados em texto semi-estruturado
Raspador: Biblioteca em Python para extração de dados em texto semi-estruturadoRaspador: Biblioteca em Python para extração de dados em texto semi-estruturado
Raspador: Biblioteca em Python para extração de dados em texto semi-estruturadoFernando Macedo
 
Palestra: Computação Paralela na SECOMP 2013 (UNIFEI)
Palestra: Computação Paralela na SECOMP 2013 (UNIFEI)Palestra: Computação Paralela na SECOMP 2013 (UNIFEI)
Palestra: Computação Paralela na SECOMP 2013 (UNIFEI)Intel Software Brasil
 
Bash tricks (notes)
Bash tricks (notes)Bash tricks (notes)
Bash tricks (notes)Carlo Caputo
 
PHP na Tela Escura: Aplicações Poderosas em Linha de Comando
PHP na Tela Escura: Aplicações Poderosas em Linha de ComandoPHP na Tela Escura: Aplicações Poderosas em Linha de Comando
PHP na Tela Escura: Aplicações Poderosas em Linha de ComandoRafael Jaques
 
Por que voce deveria documentar seu codigo?
Por que voce deveria documentar seu codigo?Por que voce deveria documentar seu codigo?
Por que voce deveria documentar seu codigo?Lennon Manchester
 
GDG Conf Node JS sem segredos
GDG Conf Node JS sem segredosGDG Conf Node JS sem segredos
GDG Conf Node JS sem segredosCaio Cutrim
 
Introdução ao Deep Learning com o TensorFlow
Introdução ao Deep Learning com o TensorFlowIntrodução ao Deep Learning com o TensorFlow
Introdução ao Deep Learning com o TensorFlowpichiliani
 
Introdução ao Deep Learning com o TensorFlow
Introdução ao Deep Learning com o TensorFlowIntrodução ao Deep Learning com o TensorFlow
Introdução ao Deep Learning com o TensorFlowMauro Pichiliani
 

Similar to Tornado mais do que um framework bonitinho (20)

Cool 3 assembly para linux
Cool 3   assembly para linuxCool 3   assembly para linux
Cool 3 assembly para linux
 
Um Mundo Java Sem XML
Um Mundo Java Sem XMLUm Mundo Java Sem XML
Um Mundo Java Sem XML
 
Slide curso metasploit
Slide curso metasploitSlide curso metasploit
Slide curso metasploit
 
23º GURU-SP - Entenda LISP em 15 minutos
23º GURU-SP - Entenda LISP em 15 minutos23º GURU-SP - Entenda LISP em 15 minutos
23º GURU-SP - Entenda LISP em 15 minutos
 
Introdução ao processamento paralelo com o Grand Central Dispatch
Introdução ao processamento paralelo com o Grand Central DispatchIntrodução ao processamento paralelo com o Grand Central Dispatch
Introdução ao processamento paralelo com o Grand Central Dispatch
 
Escrevendo modulos python com rust
Escrevendo modulos python com rustEscrevendo modulos python com rust
Escrevendo modulos python com rust
 
Estrutura de linguagem C++
Estrutura de linguagem C++Estrutura de linguagem C++
Estrutura de linguagem C++
 
Raspador: Biblioteca em Python para extração de dados em texto semi-estruturado
Raspador: Biblioteca em Python para extração de dados em texto semi-estruturadoRaspador: Biblioteca em Python para extração de dados em texto semi-estruturado
Raspador: Biblioteca em Python para extração de dados em texto semi-estruturado
 
OpenSolaris a Céu Aberto
OpenSolaris a Céu AbertoOpenSolaris a Céu Aberto
OpenSolaris a Céu Aberto
 
Presentation
PresentationPresentation
Presentation
 
Palestra: Computação Paralela na SECOMP 2013 (UNIFEI)
Palestra: Computação Paralela na SECOMP 2013 (UNIFEI)Palestra: Computação Paralela na SECOMP 2013 (UNIFEI)
Palestra: Computação Paralela na SECOMP 2013 (UNIFEI)
 
Bash tricks (notes)
Bash tricks (notes)Bash tricks (notes)
Bash tricks (notes)
 
Ccatt manual
Ccatt manualCcatt manual
Ccatt manual
 
PHP na Tela Escura: Aplicações Poderosas em Linha de Comando
PHP na Tela Escura: Aplicações Poderosas em Linha de ComandoPHP na Tela Escura: Aplicações Poderosas em Linha de Comando
PHP na Tela Escura: Aplicações Poderosas em Linha de Comando
 
Por que voce deveria documentar seu codigo?
Por que voce deveria documentar seu codigo?Por que voce deveria documentar seu codigo?
Por que voce deveria documentar seu codigo?
 
Apostila ajax
Apostila ajaxApostila ajax
Apostila ajax
 
GDG Conf Node JS sem segredos
GDG Conf Node JS sem segredosGDG Conf Node JS sem segredos
GDG Conf Node JS sem segredos
 
teste
testeteste
teste
 
Introdução ao Deep Learning com o TensorFlow
Introdução ao Deep Learning com o TensorFlowIntrodução ao Deep Learning com o TensorFlow
Introdução ao Deep Learning com o TensorFlow
 
Introdução ao Deep Learning com o TensorFlow
Introdução ao Deep Learning com o TensorFlowIntrodução ao Deep Learning com o TensorFlow
Introdução ao Deep Learning com o TensorFlow
 

More from Marcel Nicolay

Amazon Web Services Trends
Amazon Web Services TrendsAmazon Web Services Trends
Amazon Web Services TrendsMarcel Nicolay
 
Kanban - desenvolvimento ágil e lean
Kanban - desenvolvimento ágil e leanKanban - desenvolvimento ágil e lean
Kanban - desenvolvimento ágil e leanMarcel Nicolay
 
CartolaFC - uma aplicação python rápida e escalável - pythonbrasil [6]
CartolaFC - uma aplicação python rápida e escalável - pythonbrasil [6]CartolaFC - uma aplicação python rápida e escalável - pythonbrasil [6]
CartolaFC - uma aplicação python rápida e escalável - pythonbrasil [6]Marcel Nicolay
 
Cartola Fc 2010 - Uma Arquitetura escalável e performática
Cartola Fc 2010 - Uma Arquitetura escalável e performáticaCartola Fc 2010 - Uma Arquitetura escalável e performática
Cartola Fc 2010 - Uma Arquitetura escalável e performáticaMarcel Nicolay
 

More from Marcel Nicolay (6)

Tornado
TornadoTornado
Tornado
 
Amazon Web Services Trends
Amazon Web Services TrendsAmazon Web Services Trends
Amazon Web Services Trends
 
Performance na web
Performance na webPerformance na web
Performance na web
 
Kanban - desenvolvimento ágil e lean
Kanban - desenvolvimento ágil e leanKanban - desenvolvimento ágil e lean
Kanban - desenvolvimento ágil e lean
 
CartolaFC - uma aplicação python rápida e escalável - pythonbrasil [6]
CartolaFC - uma aplicação python rápida e escalável - pythonbrasil [6]CartolaFC - uma aplicação python rápida e escalável - pythonbrasil [6]
CartolaFC - uma aplicação python rápida e escalável - pythonbrasil [6]
 
Cartola Fc 2010 - Uma Arquitetura escalável e performática
Cartola Fc 2010 - Uma Arquitetura escalável e performáticaCartola Fc 2010 - Uma Arquitetura escalável e performática
Cartola Fc 2010 - Uma Arquitetura escalável e performática
 

Tornado mais do que um framework bonitinho