RailsとJuggernautをインスタント通信に使用


詳細
AJAXはAJAXが登場する前に、伝統的なネットソフトのユーザーがまず勉強しなければならないのは待つことです.2005年までGoogle SuggestやGoogle Mapなどのオンラインソフトウェアが登場し、XMLhttp RequestやJava Scriptを利用して、ネットソフトウェアがレイアウトを再ロードせずに資料を更新できるようになった.このような即時応答はネット上のソフトウェアのユーザー体験を大幅に改善し、JJGはこの技術をAJAX 1と呼んでいる.以来、Wep Appはついに従来のソフトウェアと比較することができ、AJAXはWeb 2.0の背後にある最も重要な技術とされている.
Conetにはまだ問題があります.AJAXは従来のオンラインソフトと同様に利用者の動きに一方的に応えるしかない.使用者がアクティブにpollingする以外は,基本的にソフトウェアがユーザにメッセージを送信することはできない.大衆の相互作用を求めるWeb 2.0は、インスタント通信ができないという制限は、多くのソフトウェアを発展させなかった.2006年、GTalkとMeeboが登場し、それらは持続的なHTTP connectionを利用して、HTTP協定だけで即時通信の効果を達成することができ、Alex Russellはこのような技術をComet 2と呼んでいる.これはいかなる字の簡潔ではなく、イベントガイド、サーバー側Push資料のソフトウェアを指す.Comet: Low Latency Data for the Browser
Compare AJAX and Comet web model, originally from
Ruby on RailsとWeb 2.0 Ruby on Rails自体がPrototypeとScriptを統合aculo.US,開発者はRuby on Railsだけで純粋なAJAXソフトを書くことができる.相対的にCometのツールはRailsではまだ成熟していないが,その中で最も容易なのはJuggernautである.Juggernautは、FlashのJuggernaut clientをレイアウトに追加します.JuggernautのPush Serverと継続的なXMLSocket接続を維持し、serverからjavascriptを受信してclient画面を更新します.次はJuggernautでPushのサイトを作る方法を示します.
システム要件
  • Rails 1.1以上
  • json gem (gem install json)
  • eventmachine gem(gem install eventmachineまたはgem install eventmachine-win 32)
  • 使用方法
  • 新しいプロジェクトを開き、juggernautをインストールします.
    rails Realtime cd Realtime script/plugin install svn://rubyforge.org//var/svn/juggernaut/trunk/juggernaut
  • layout"apps/view/layout/application.rhtml"javascript_include_tag:defaultsは基本的なRails helperで、juggernautをインストールするとjuggernautのjavascriptファイルが自動的に含まれます.
    
      
        
      
      
        
      
    

  • コントローラ「main」を追加:
    ./script/generate controller main index
  • 必要に応じて設定ファイル「config/juggernaut.yml」を変更し、しばらく変更する必要はありません.
  • view「app/views/main/index.rhtml」を追加、form_remote_tagは基本的なRails AJAX functionで、HTML FORMの動作用AJAXをServerに送ります.listen_to_juggernaut_channels()はclientにページをロードした後に接続してchannelがpush資料を受信することを指定させる.
    Push Demo
    {:action => :push} %>
  • 「app/controllers/main_controller.rb」を変更し、push methodを追加します.Juggernaut.send_Data()メソッドは、接続されているすべてのClientにメッセージを受信します.
    class MainController < ApplicationController
      def index
      end
    
      def push
        Juggernaut.send_data("alert('Hello, world!')", ['channel'])
      end
    end

  • は成果をテストする時です!Railsを起動し、Juggernaut Push Serverを起動します.
    ruby ./script/push_server Starting Juggernaut Push Server Port: 15000 Host: 0.0.0.0
    ./script/server => Booting Mongrel (use 'script/server webrick' to force WEBrick) => Rails application starting on http://0.0.0.0:3000 => Call with -d to detach => Ctrl-C to shutdown server ** Starting Mongrel listening at 0.0.0.0:3000 ** Starting Rails with development environment… ** Rails loaded.
  • 同時に2つのbrowserを開いてみますhttp://localhost:3000/を押して、その中の1ページの“Push”ボタンを押して、2つのbrowserは同時に1つのjavascriptのalert messageを弾きます!
  • 以上の例では、clientからserverへのメッセージはAJAXから、serverからclientへのメッセージはJuggernautから送信されています.そうすれば、双方向でインスタントに通信できるソフトウェアモデルがあり、このような強力な力をどのように利用するかは開発者が考えなければなりません.
  • はもちろん、Juggernautには、単一のユーザに対するメッセージの送信、チャネルへの動的な加入および離脱、ユーザ認証、およびBrowserのオンおよびオフ時にtrigger actionを起動するなどの他の機能があります.詳細はNicolas Caviglianoが更新している授業を参照してください.もちろん、Juggernautのソースコード、特にlibrary"vendor/plugins/juggernaut/lib/juggernaut.rb"とPush Server"vendor/plugins/juggernaut/media/push_serve"
  • を読むこともできます.
  • 以上の例のソースコードは、ここで
  • をダウンロードすることができる.
    Juggernautの研究で出会った問題
  • FlashはXMLSocket Connectionに多くの制限があります.Juggernautの著者は、ソフトウェアがfirewallを通過できるようにPush Serverを443 portに置くことを提案した.しかしなぜか私のパソコンではFirefoxもSafari Flashも443 portに接続しようとしない...
  • 注意しろymlのHOSTとURL、もしあなたがlocalhostを設定するならば、browserの中で127.0.0.1を入力するのは絶対に成功しません!これはFlashのcross site socket防止メカニズムです.
  • ClientとPush ServerはSocket連結を使用し、RailsはPush Serverと同様にSocketを使用します.JuggernautのfunctionはすべてRailsにSocketを開いてPush Serverに接続させます.メッセージを送るたびにSocketが大規模なアプリケーションで必要になるのは良い考えではないようです.

  • 他の案Apache ActiveMQのAJAX Polling案は,Pushingのような効果が得られるようで検討される.
    延申読解
  • Comet PUSH Serverアーキテクチャ
  • について
  • Ajax: A New Approach to Web Applications ↩
  • Comet: Low Latency Data for the Browser ↩