Criando um Instant Messenger

Loading...

Flash Player 9 (or above) is needed to view presentations.
We have detected that you do not have it on your computer. To install it, go here.

0 comments

Post a comment

    Post a comment
    Embed Video
    Edit your comment Cancel

    1 Favorite

    Criando um Instant Messenger - Presentation Transcript

    1. Criando um Instant Messenger com Rails Vinícius Baggio Fuentes
    2. Agenda • Experimentar: por que ruby e rails? • Botando a mão na massa • Trocando idéias com o GoogleTalk • Juntando tudo: Rails • Distributed Ruby (DRb) • Perguntas
    3. Experimentar: por que ruby e rails? • Because we can! • Rápidos resultados • Criatividade e liberdade
    4. Experimentar: por que ruby e rails? • Because we can! • Rápidos resultados • Criatividade e liberdade
    5. Botando a mão na massa (i) • O que é XMPP/Jabber
    6. Botando a mão na massa (i) • O que é XMPP/Jabber • Trocar XMLs via rede
    7. Botando a mão na massa (i) • O que é XMPP/Jabber • Trocar XMLs via rede • Autenticação e encriptação
    8. Botando a mão na massa (i) • O que é XMPP/Jabber • Trocar XMLs via rede • Autenticação e encriptação • Descentralizado
    9. Botando a mão na massa (i) • O que é XMPP/Jabber • Trocar XMLs via rede • Autenticação e encriptação • Descentralizado • Extensível
    10. Botando a mão na massa (ii) • Usos do XMPP
    11. Botando a mão na massa (ii) • Usos do XMPP • Conversar
    12. Botando a mão na massa (ii) • Usos do XMPP • Conversar • Web Services
    13. Botando a mão na massa (ii) • Usos do XMPP • Conversar • Web Services • Robôs ajudantes
    14. Botando a mão na massa (ii) • Usos do XMPP • Conversar • Web Services • Robôs ajudantes • Manutenção e deploy
    15. Botando a mão na massa (iii) • XMPP
    16. Botando a mão na massa (iii) • XMPP • JID
    17. Botando a mão na massa (iii) • XMPP • JID • Presence
    18. Botando a mão na massa (iii) • XMPP • JID • Presence • Messages
    19. Botando a mão na massa (iii) JID’s: vinibaggio@gmail.com/GTalk • XMPP vinibaggio@vinibaggio.com/Pidgin • JID • Presence • Messages
    20. Botando a mão na massa (iii) • XMPP • JID • Presence • Messages
    21. Botando a mão na massa (iii) <presence from='xxxxx@gmail.com' type='unavailable' • XMPP to='vinibaggio@gmail.com/ •JID chattyAB9DA217' xmlns='jabber:client'/> • Presence • Messages
    22. Botando a mão na massa (iii) • XMPP • JID • Presence • Messages
    23. Botando a mão na massa (iii) <message type='chat' to='xxxxxxx@gmail.com' • XMPPxmlns='jabber:client'> <body>Nao fuja!</body> •JID </message> • Presence • Messages
    24. Botando a mão na massa (iii) • XMPP • JID • Presence • Messages
    25. Botando a mão na massa (iv) • XMPP em Ruby:
    26. Botando a mão na massa (iv) • XMPP em Ruby: • XMPP4R
    27. Botando a mão na massa (iv) • XMPP em Ruby: • XMPP4R • XMPP4R::Simple
    28. Botando a mão na massa (iv) • XMPP em Ruby: • XMPP4R • XMPP4R::Simple • Net::XMPP
    29. Trocando idéias com o GoogleTalk
    30. Trocando idéias com o require ‘xmpp4r’ GoogleTalk include Jabber Jabber::debug = true jid = Jabber::JID.new ‘vinibaggio@gmail.com/Chatty’ password = ‘*******’ client = Jabber::Client.new jid client.connect ‘talk.google.com’ client.auth password client.send Presence.new @clients[email] = client
    31. Trocando idéias com o require ‘xmpp4r’ GoogleTalk include Jabber Type: Status: Jabber::debug (available) nil = true nil (available) :error :away jid = Jabber::JID.new ‘vinibaggio@gmail.com/Chatty’ :probe :chat password = ‘*******’ :subscribe :dnd :subscribed :xa client = Jabber::Client.new jid :unavailable client.connect ‘talk.google.com’ :unsubscribe client.auth password :unsubscribed client.send Presence.new @clients[email] = client
    32. Trocando idéias com o GoogleTalk client.add_message_callback do |msg| unless msg.type == :error or msg.body.nil? push_msg msg end end client.add_presence_callback do |presence| push_presence presence end
    33. Trocando idéias com o GoogleTalk def push_msg(msg) from = msg.from.bare.to_s to = msg.to.bare.to_s body = msg.body new_msg = {:body => body, :from => from} @msg_stack[to].push new_msg end
    34. Trocando idéias com o GoogleTalk def push_presence(presence) from = presence.from.bare.to_s to = presence.to.bare.to_s if presence.type == :unavailable status = :unavailable else status = presence.show || :available end new_presence = {:status => status, :from => from} @presence_stack[to].push new_presence end
    35. Trocando idéias com o GoogleTalk client.close
    36. Trocando idéias com o class XMPPConnector GoogleTalk include Singleton def login(email, password); ...; end; def get_presences(jid); ...; end; def get_messages(jid); ...; end; def send_message(jid, to, msg); ...; end; def set_status(jid, status); ...; end; def logout(jid); ...; end; private def check_timeout; ...; end; def push_msg(msg); ...; end; def push_presence(msg); ...; end; end
    37. Trocando idéias com o GoogleTalk connector = XMPPConnector.instance jid = connector.login(‘vinibaggio@gmail.com’, ‘*****’) msgs = connector.get_messages(jid) presences = connector.get_presences(jid) connector.send_message(jid, ‘xxxx@gmail.com’, ‘Oi!’) connector.set.status(jid, :dnd);
    38. Juntando tudo: Rails Acabou a parte do XMPP! Vamos pro Rails!!
    39. Juntando tudo: Rails require ‘xmppconnector’ class MessengerController < ApplicationController filter_parameter_logging :password def login email = params[:email] password = params[:password] xmpp = XMPPConnector.instance session[:jid] = xmpp.login(email, password) render :action => ‘chat’ end ... end
    40. send_msg check_updates
    41. vinibaggio
    42. vinibaggio ****************
    43. Pergunta fatídica...
    44. Pergunta fatídica... Does it scale?
    45. Pergunta fatídica... Does it scale? Nope.
    46. Tipo de request: Login (Mongrel simples) Messenger#login(vinibaggio) MessengerController::login localhost:3000/login XMPP Layer Request joao App Rails dispatcher maria * vinibaggio localhost:3000/chat :render => \"chat\" OK mongrel simples
    47. Tipo de request: Login (mod_rails) Messenger#login(vinibaggio) MessengerController::login XMPP Layer 1 Instância joao Rails 1 maria XMPP Layer 2 Instância localhost:3000/login Request vitor Rails 2 * vinibaggio dispatcher localhost:3000/chat XMPP Layer 5 Instância pedro Rails 5 paulo :render => \"chat\" OK mod_rails (Passenger)
    48. Tipo de request: Send_msg (mod_rails) Messenger#send_msg(vinibaggio) MessengerController::send_msg XMPP Layer 1 Instância joao Rails 1 maria ERROR XMPP Layer 2 Instância localhost:3000/send_msg Request vitor Rails 2 vinibaggio dispatcher localhost:3000/timeout flash[:error] = \"Invalid connection\" XMPP Layer 5 Instância pedro Rails 5 paulo mod_rails (Passenger)
    49. Distributed Ruby! • Remote Method Invocation (RMI) • Standard library • Access Control Lists (ACLs)
    50. require ‘drb’ DRb.start_service ‘druby://localhost:6666’, [] DRb.thread.join Servidor
    51. require ‘drb’ r = DRbObject.new nil, ‘druby://localhost:6666’ while true puts r.size r << 1 puts r.size sleep 10 end Cliente
    52. A Tempo 0 0s 1 B 1 5s 2 2 10s 3 3 15s 4
    53. Arquitetura com mod_rails + DRb Instância Rails 1 RemoteXMPP Requests Instância joao Request Rails 2 maria dispatcher pedro paulo Response vitor vinibaggio Instância Rails 5 mod_rails
    54. require ‘drb’ include ‘xmppconnector’ DRb.start_service ‘druby://localhost:6666’, XMPPConnector.instance DRb.thread.join Servidor XMPP + DRb
    55. Rails + DRb require ‘xmppconnector’ class MessengerController < ApplicationController filter_parameter_logging :password def login ... end def xmpp DRbObject.new nil, ‘druby://localhost:6666’ end ... end
    56. That’s it! • Relembrando... • Biblioteca XMPP4R para XMPP • Rails para fazer a interface • Paralelizando a arquitetura • Distributed Ruby (DRb)
    57. Obrigado!!! • Perguntas?? • Contato: • vinibaggio@gmail.com • www.vinibaggio.com

    + vinibaggiovinibaggio, 7 months ago

    custom

    572 views, 1 favs, 0 embeds more stats

    Essa é a minha palestra no evento Ruby + Rails no more

    More info about this document

    © All Rights Reserved

    Go to text version

    • Total Views 572
      • 572 on SlideShare
      • 0 from embeds
    • Comments 0
    • Favorites 1
    • Downloads 16
    Most viewed embeds

    more

    All embeds

    less

    Flagged as inappropriate Flag as inappropriate
    Flag as inappropriate

    Select your reason for flagging this presentation as inappropriate. If needed, use the feedback form to let us know more details.

    Cancel
    File a copyright complaint
    Having problems? Go to our helpdesk?

    Categories