Chat NodeJS em
Produção
Willian Carvalho
@chambftw
willian_carvalho (Freenode)
Qual é o objetivo da
apresentação?
Apresentar os requisitos do projeto
Falar dos problemas enfrentados
Falar das soluções ...
Requisitos da aplicação
Conexão segura SSL
Múltiplas empresas
Somente para usuários autenticados
Possibilitar outro serviç...
Ferramentas
Socket.IO - Abstração de websocket e fallbacks
Express - Web server de comunicação com sistema legado
Módulo h...
Estrutura do projeto
Websocket Server (ws_server.js)
Namespace por empresa (tenant.js)
Chat service (chatService.js)
Confi...
Estrutura do projeto
Workflow da aplicação
package.json
"pCn" {
apof:
"htot:99,
caPr" 00
"e" "ro/s-ie/ayo.e"
ky: /otslflsqbyuky,
"et:"ro/s-ie/ayo.r"
cr" /otslflsqbyu...
ws_server.js
sre =gttpSre(;
evr
eHtsevr)
i =rqie'okti'.itnsre)
o
eur(sce.o)lse(evr;
i.okt.n'oncin,oCneto)
osceso(cneto' no...
ws_server.js:getHttpsServer
fnto gttpSre( {
ucin eHtsevr)
vrotos={
a pin
ky f.edieyccni.e)
e: sraFlSn(ofgky,
cr:f.edieyccn...
ws_server.js:doAuth
fnto dAt(adhkDt,clbc){
ucin ouhhnsaeaa alak
vrhaes=hnsaeaahaes
a edr
adhkDt.edr,
coi =haescoi,
oke
edr...
ws_server.js:onConnection
fnto oCneto(okt {
ucin noncinsce)
vrueDt =gtsraasce.adhk)
a sraa
eUeDt(okthnsae,
tnnN ='tnn'+ueD...
tenant.js
eprsgtntne=fnto(o n){
xot.eIsac
ucini, s
fnto ii( {
ucin nt)
caSriegtntne)
htevc.eIsac(;
cnoelg'trigtnn " +n +''...
chatService.js
eprsgtntne=fnto( {
xot.eIsac
ucin)
rtr {
eun
ii:fnto( {
nt ucin)
vrsl =ti;
a ef
hs
ti.sokt.n'oncin,fnto(okt...
Quando tudo funcionou bem...
Refactoring...
Mais refactoring!
E ainda precisa melhorar
Para fechar
Se você gosta de codar, procure ficar bom,
e não só ser um usuário (refém) de APIs
Obrigado
Upcoming SlideShare
Loading in …5
×

Chat node js em produção

550 views

Published on

Minha apresentação no RuPy BR 2013 sobre o case de entregar um chat com nodeJS em produção.
O chat é autenticado através do sistema legado, em um ambiente SSL

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
550
On SlideShare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
3
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Chat node js em produção

  1. 1. Chat NodeJS em Produção
  2. 2. Willian Carvalho @chambftw willian_carvalho (Freenode)
  3. 3. Qual é o objetivo da apresentação? Apresentar os requisitos do projeto Falar dos problemas enfrentados Falar das soluções escolhidas Experiência com o Node na vida real Compartilhar com outros devs
  4. 4. Requisitos da aplicação Conexão segura SSL Múltiplas empresas Somente para usuários autenticados Possibilitar outro serviços plugáveis
  5. 5. Ferramentas Socket.IO - Abstração de websocket e fallbacks Express - Web server de comunicação com sistema legado Módulo http - HTTP Client Módulo https - Oferecer https:// Módulo fs - Leitura de arquivos do certificado SSL
  6. 6. Estrutura do projeto Websocket Server (ws_server.js) Namespace por empresa (tenant.js) Chat service (chatService.js) Configurações (package.json)
  7. 7. Estrutura do projeto
  8. 8. Workflow da aplicação
  9. 9. package.json "pCn" { apof: "htot:99, caPr" 00 "e" "ro/s-ie/ayo.e" ky: /otslflsqbyuky, "et:"ro/s-ie/ayo.r" cr" /otslflsqbyuct, "a:"ro/s-ie/ditreit.r" c" /otslflsg_nemdaect } vrapof=rqie'/akg.sn)apof a pCn eur(.pcaejo'.pCn;
  10. 10. ws_server.js sre =gttpSre(; evr eHtsevr) i =rqie'okti'.itnsre) o eur(sce.o)lse(evr; i.okt.n'oncin,oCneto) osceso(cneto' noncin; i.ofgr(pouto' fnto( { ocniue'rdcin, ucin) i.e(atoiain,dAt) ost'uhrzto' ouh; /Ti fxsise wt triaigteSLi foto /hs ie sus ih emntn h S n rn f /Nd adfriglcto t tiki' wsisedo w. /oe n ocn oain o hn ts s nta f s i.e(mthoii pooo' tu) ost'ac rgn rtcl, re; i.e(lglvl,0; ost'o ee' ) }; ) sre.itnsrePr) evrlse(evrot;
  11. 11. ws_server.js:getHttpsServer fnto gttpSre( { ucin eHtsevr) vrotos={ a pin ky f.edieyccni.e) e: sraFlSn(ofgky, cr:f.edieyccni.et, et sraFlSn(ofgcr) c:f.edieyccni.a, a sraFlSn(ofgc) rqetet fle eusCr: as } , epes=rqie'xrs', xrs eur(epes) ap=epes) p xrs(; } rtr rqie'tp'.raeevrotos ap; eun eur(hts)cetSre(pin, p)
  12. 12. ws_server.js:doAuth fnto dAt(adhkDt,clbc){ ucin ouhhnsaeaa alak vrhaes=hnsaeaahaes a edr adhkDt.edr, coi =haescoi, oke edr.oke hs =gtr(edr.ot, ot eUlhaeshs) bfe =', ufr ' otos={ pin hsnm:hs, otae ot pr:43 ot 4, pt:rs_evc_r, ah etsrieul haes {oke coi} edr: coi: oke } ; } rqetsraaotos; eusUeDt(pin) clbc(ul tu) alaknl, re;
  13. 13. ws_server.js:onConnection fnto oCneto(okt { ucin noncinsce) vrueDt =gtsraasce.adhk) a sraa eUeDt(okthnsae, tnnN ='tnn'+ueDt.eatd eatS /eat sraatnnI; i(sraatnnI & tnnN i nmsae ==fle { fueDt.eatd & eatS n aepcs = as) vrt=tnn.eIsac(o tnnN) a eatgtntnei, eatS; tii(; .nt) } } nmsae[eatS =tu; aepcstnnN] re No client vrtpokt=i.onc(oktR) a mSce ocnetsceUL; tpoktei(hseat,'tnn'+tnnI) mSce.mt'aTnn' /eat eatd; tpokto(hseat,fnto( { mSce.n'aTnn' ucin) sce =i.onc(oktR +'tnn'+tnnI) okt ocnetsceUL /eat eatd; }; )
  14. 14. tenant.js eprsgtntne=fnto(o n){ xot.eIsac ucini, s fnto ii( { ucin nt) caSriegtntne) htevc.eIsac(; cnoelg'trigtnn " +n +''; osl.o(Satn eat ' s ") nSces=i.fn) sokt oo(s; nSceso(cneto' oCneto) sokt.n'oncin, noncin; } .. . } ; rtr {nt ii} eun ii: nt;
  15. 15. chatService.js eprsgtntne=fnto( { xot.eIsac ucin) rtr { eun ii:fnto( { nt ucin) vrsl =ti; a ef hs ti.sokt.n'oncin,fnto(okt { hsnSceso(cneto' ucinsce) sl.idvnssce) efbnEet(okt; }; ) } , bnEet:fnto(okt { idvns ucinsce) } ; } ; } , .. .
  16. 16. Quando tudo funcionou bem... Refactoring... Mais refactoring! E ainda precisa melhorar
  17. 17. Para fechar Se você gosta de codar, procure ficar bom, e não só ser um usuário (refém) de APIs
  18. 18. Obrigado

×