SlideShare une entreprise Scribd logo
1  sur  129
Télécharger pour lire hors ligne
ActionScript3+Ruby+J2EE+Javascript.....


AIR+BlazeDS+Ruby


Yuichiro MASUI <masui@masuidrive.jp>
自己紹介
masuidrive
   現在フリーランス
  10分Railsムービー
アバウトミー / PingKing
     PukiWiki
   3月に起業で渡米
お題
ビジネスメッセンジャー
専用のクライアント
   ログ機能
  会議室機能
専用のクライアントは
   AIRで作る
Adobe AIR
インターネットの技術を
使ってデスクトップアプリを
     作る環境
ActionScript3+MXML
  HTML+Javascript
Ajaxはほとんどそのまま動く
現在ベータ3
日本語処理に難あり
ブラウザと違いセキュリティ
   上の制限は無い
SQLiteを内蔵しているので
ビジネスアプリにも向いている
メッセージングは
BlazeDSを使おう
Adobeがリリースした
  オープンソースの
メッセージングサーバ
元々はLiveCycle Data
 Serviceとして提供されていた
  機能からリモーティングと
メッセージングを切り出したもの
Tomcat6で動く
リモーティング
Tomcat上のメソッドを
外部のActionScriptから
  簡単に呼び出せる
それってRMI...
それってdRuby...
メッセージング
クライアント間でメッセージ
  のやり取りができる
シリアライズした
ActionScriptのオブジェクト
  をメッセージとして扱う
簡単なものなら
コードを書かないでも動く
でも私、Java分からない...
秘密兵器 JRuby
JavaVM上で動く
    Ruby
多分BlazeDSもJRubyから
   呼び出せるはず
Railsと組み合わせて
     ログを管理
AIR        AIR         ブラウザ



      BlazeDS



      JRuby on Rails
言語           UI
    AIR
  (Flash)   ActionScript3   MXML
    AIR
 (HTML)       Javascript    HTML
BlazeDS          Java        ー
 Rails          Ruby        HTML
言語           UI
    AIR
  (Flash)   ActionScript3   MXML
    AIR
 (HTML)       Javascript    HTML
BlazeDS          Java        ー
 Rails          Ruby        HTML
言語            UI
    AIR
        まて。
  (Flash)
    AIR
            ActionScript3   MXML

 (HTML) Javascript HTML

全部違わないか?
BlazeDS    Java     ー
  Rails         Ruby        HTML
なんかむちゃくちゃな
組み合わせな気がしてきた
まずはAIR間で動く
メッセンジャーを作ろう
AIR    AIR      AIR




      BlazeDS
AIR    AIR      AIR




      BlazeDS
クライアント間の
メッセージ交換は
XMLだけで作れる
まずはBlazeDSで
メッセージングサーバを
    立てる
最新のβ版をダウンロード
    そして展開
Tomcatも付属しているので
      すぐに起動可能
tomcat/webapps/blazedsに
       ひな形がある
$ cp -R tomcat/webapps/blazeds 
  tomcat/webapps/instantmessenger


        ひな形をコピー後
      service-config.xml
    messaging-config.xmlを
          書き換える
messaging-config.xml
<?xml version="1.0" encoding="UTF-8"?>
<service id="message-service" class="flex.messaging.services.MessageSer
vice">
   <adapters>
    <adapter-definition id="actionscript" class="flex.messaging.services.me
ssaging.adapters.ActionScriptAdapter" default="true" />
    <adapter-definition id="jms" class="flex.messaging.services.messaging
.adapters.JMSAdapter"/>
   </adapters>


  <default-channels>
   <channel ref="my-streaming-amf"/>
   <channel ref="my-polling-amf"/>
  </default-channels>


  <destination id="chat"/>
</service>
channelは送信方法
BlazeDSはクライアントとの
やり取りで複数のプロトコル
    をサポートしている
<default-channels>
 <channel ref="my-streaming-amf"/>
 <channel ref="my-polling-amf"/>
</default-channels>
steamingは専用プロトコル
 ステートレスで高速だけど
 proxyなどが超えられない
pollingはcomet方式
 httpをkeep-aliveでTCP
セッションを繋いだまま定期
   的にリクエストを送出
HTTPなのでProxyも超えら
          れる
どちらを使っているか
開発者が意識する必要がない
destinationは部屋名
AIR    AIR      AIR




      BlazeDS
AIR    AIR      AIR




      BlazeDS
AIR      AIR      AIR



steam    steam    polling


          chat
        BlazeDS
$ ./tomcat/bin/startup.sh
これでこのサーバで
 メッセージ交換が
できるようになった
AIRクライアントを作ろう
Flex builder3 betaが
公開されているのこれを使う
 Flex SDKでも作れるけど
   無理はしない方がいい
ファイル→新規→Flex プロジェクト
アプリケーションサーバは「なし」
アプリケーションサーバを
指定するとXMLからサーバの
  設定を引っ張ってくれる
クライアントプログラムで
変更できるようにしたいので
   あえて使わない
mxmlをデザインモードで開いて
UIは適当に出来上がり
AIRとBlazeDSを繋げる
Consumer - 受け手
Producer - 送り手
AIR      AIR      AIR



steam    steam    polling


          chat
        BlazeDS
AIR        AIR        AIR
Producer   Consumer   Consumer




 steam      steam      polling


             chat
           BlazeDS
AIR




 BlazeDS
AIR
           channel
       steam    polling




 BlazeDS
AIR
                      channel
Producer          steam    polling




            BlazeDS
distination: chat
{ message: “hoge” }


                      AIR
                                 channel
    Producer                 steam    polling




                       BlazeDS
distination: chat
{ message: “hoge” }


                      AIR
                                   channel
    Producer                  steam     polling




                       BlazeDS


                            chat
channels
                            steam    polling



private var channels:Array = [];


var streaming_amf:StreamingAMFChannel =
 new StreamingAMFChannel("my-streaming-amf", "http://127.0.0.1:
8400/instantmessenger/messagebroker/streamingamf");
channels.push(streaming_amf);


var polling_amf:AMFChannel =
 new AMFChannel("my-polling-amf", "http://127.0.0.1:8400/instant
messenger/messagebroker/amfpolling");
polling_amf.pollingEnabled = true;
polling_amf.pollingInterval = 3000;
channels.push(polling_amf);
メッセージの接続先
/コンテキスト/messagebroker/チャンネル
Producer
                                      channels
                      (chat)




var prod:Producer = new Producer();


prod.destination = "chat";
prod.channelSet = new ChannelSet();
for(index in channels) {
  prod.channelSet.addChannel(channels[index]);
}
prod.connect();
メッセージを送ってみる
Producer
 { message: “hoge” }
                         (chat)




var message:IMessage = new AsyncMessage();
message.body = new Object();
message.body.message = "hoge";


prod.send(message);
メッセージは
 シリアライズできる任意の
オブジェクトを送ることができる
送信部分は出来上がり
続いて受信部分
AIR




  BlazeDS


chat
AIR
                channel
             steam   polling




  BlazeDS


chat
AIR
                    channel
Consumer         steam   polling




       BlazeDS


    chat
log.value += message

                 ハンドラー登録
                       AIR
                                channel
    Consumer                 steam   polling




              BlazeDS


          chat
log.value += message

                ハンドラー登録
                       AIR
                                channel
    Consumer                 steam   polling




              BlazeDS


{ message: “hoge” }
           chat
log.value += message

                  ハンドラー登録
                         AIR
呼び出し
                                  channel
       Consumer                steam   polling




                BlazeDS


  { message: “hoge” }
             chat
Consumer
 messageHandler                      channels
                    (chat)



var cons:Consumer cons = new Consumer();
cons.destination = "chat";


cons.channelSet = new ChannelSet();
for(var index:String in channels) {
  cons.channelSet.addChannel(channels[index]);
}
cons.addEventListener(MessageEvent.MESSAGE,
messageHandler);
messageHandler




function messageHandler(e:MessageEvent):void
{
  log.text += e.message.body.message + "n";
}
動かしてみよう
クリック
クリック
直接ではなく
BlazeDSを通して通信
Rubyからもメッセージを
    送ってみよう
サーバでProducerを
  動かせばOK
でもJavaじゃなくてRubyで
JRuby
TomcatにJRubyを
 インストールする
Tomcat6へJRubyを
導入する方法は下記を参考に
         しました
http://www.okisoft.co.jp/
    esc/ruby/jservlet
Servlets in JRuby on Tomcat
RubyでServletが書けます
もちろん普通にBlazeDSも
   呼び出せます
Rubyからメッセージを投稿
      Send.rb
必要なクラスを読み込み
include_class "flex.messaging.MessageBroker"
include_class "flex.messaging.util.UUIDUtils"
include_class "flex.messaging.messages.AsyncMessage"
なにもしないSendクラス
include_class "flex.messaging.MessageBroker"
include_class "flex.messaging.util.UUIDUtils"
include_class "flex.messaging.messages.AsyncMessage"


class Send < HttpServlet
 def doPost(req, res)
   res.content_type = 'text/html; charset="UTF-8"'
   // ∼ ここに処理を追加 ∼
   wf = res.writer
   wf.println 'OK'
 end
end
メッセージ送信部分

broker = MessageBroker.getMessageBroker(nil)


msg = AsyncMessage.new
msg.setDestination "chat"
msg.setClientId UUIDUtils.createUUID
msg.setMessageId UUIDUtils.createUUID
msg.setTimestamp Time.now.to_f*1000


message_body = req.get_parameter("message") ¦¦ ""
msg.setBody({'message' => message_body})
broker.routeMessageToService(msg, nil)
メッセージ送信できあがり
Rubyからでも簡単に
 BlazeDSが扱える
クライアントがActionScript3
   サーバがJ2EEだと
  言語の違いが大きすぎる
AS3と組み合わせるなら
 Rubyの方が合ってる
さて次は
ログを取る機能を実装
続きはWebで
「Adobe Developers
Connection」に掲載予定
BlazeDSの正式版が
出てからだから3月になるかも
今回の資料とソースは
blog.masuidrive.jpで
感想
既にLCDSとして枯れた
  コードをベースにして
メッセージングができるのは
    大変うれしい
JRubyとの合わせも
     簡単
でもそもそも
JRubyが....
AIRにはグラフ系コンポーネ
  ントも揃っているので
ログやノーティファイアを
  作るのが面白そう
Ajaxもサポートしているので
 Webでリアルタイムインタ
  フェースを作るときには
      検討価値大

Contenu connexe

Similaire à AIR+Blaze+Ruby

AWS Simple Email Service詳細 -ほぼ週刊AWSマイスターシリーズ第11回-
AWS Simple Email Service詳細 -ほぼ週刊AWSマイスターシリーズ第11回-AWS Simple Email Service詳細 -ほぼ週刊AWSマイスターシリーズ第11回-
AWS Simple Email Service詳細 -ほぼ週刊AWSマイスターシリーズ第11回-
SORACOM, INC
 
Apache Camel Netty component
Apache Camel Netty componentApache Camel Netty component
Apache Camel Netty component
ssogabe
 
20120528 aws meister-reloaded-awssd-kforjava-public
20120528 aws meister-reloaded-awssd-kforjava-public20120528 aws meister-reloaded-awssd-kforjava-public
20120528 aws meister-reloaded-awssd-kforjava-public
Amazon Web Services Japan
 
AWS + Windows(C#)で構築する.NET最先端技術によるハイパフォーマンスウェブアプリケーション開発実践
AWS + Windows(C#)で構築する.NET最先端技術によるハイパフォーマンスウェブアプリケーション開発実践AWS + Windows(C#)で構築する.NET最先端技術によるハイパフォーマンスウェブアプリケーション開発実践
AWS + Windows(C#)で構築する.NET最先端技術によるハイパフォーマンスウェブアプリケーション開発実践
Yoshifumi Kawai
 
node+socket.io+enchant.jsでチャットゲーを作る
node+socket.io+enchant.jsでチャットゲーを作るnode+socket.io+enchant.jsでチャットゲーを作る
node+socket.io+enchant.jsでチャットゲーを作る
Kiyoshi SATOH
 

Similaire à AIR+Blaze+Ruby (20)

20200528_AWSでサーバーレスなLINEBotLIFFアプリ環境をIaCな感じで構築するよ!.pdf
20200528_AWSでサーバーレスなLINEBotLIFFアプリ環境をIaCな感じで構築するよ!.pdf20200528_AWSでサーバーレスなLINEBotLIFFアプリ環境をIaCな感じで構築するよ!.pdf
20200528_AWSでサーバーレスなLINEBotLIFFアプリ環境をIaCな感じで構築するよ!.pdf
 
Programming AWS with Perl at YAPC::Asia 2013
Programming AWS with Perl at YAPC::Asia 2013Programming AWS with Perl at YAPC::Asia 2013
Programming AWS with Perl at YAPC::Asia 2013
 
Clrh 110716 wcfwf
Clrh 110716 wcfwfClrh 110716 wcfwf
Clrh 110716 wcfwf
 
Android T2 on cloud
Android T2 on cloudAndroid T2 on cloud
Android T2 on cloud
 
『RIA開発におけるサービス開発のイロハ』
 『RIA開発におけるサービス開発のイロハ』 『RIA開発におけるサービス開発のイロハ』
『RIA開発におけるサービス開発のイロハ』
 
RIA開発におけるサービス開発のイロハ
RIA開発におけるサービス開発のイロハRIA開発におけるサービス開発のイロハ
RIA開発におけるサービス開発のイロハ
 
AWS Simple Email Service詳細 -ほぼ週刊AWSマイスターシリーズ第11回-
AWS Simple Email Service詳細 -ほぼ週刊AWSマイスターシリーズ第11回-AWS Simple Email Service詳細 -ほぼ週刊AWSマイスターシリーズ第11回-
AWS Simple Email Service詳細 -ほぼ週刊AWSマイスターシリーズ第11回-
 
AWS Black Belt Tech シリーズ 2015 - AWS IoT
AWS Black Belt Tech シリーズ 2015 - AWS IoTAWS Black Belt Tech シリーズ 2015 - AWS IoT
AWS Black Belt Tech シリーズ 2015 - AWS IoT
 
AWS Amplify - Auth/API Category & Vue 構築ハンズオン
AWS Amplify - Auth/API Category & Vue 構築ハンズオンAWS Amplify - Auth/API Category & Vue 構築ハンズオン
AWS Amplify - Auth/API Category & Vue 構築ハンズオン
 
Apache Camel Netty component
Apache Camel Netty componentApache Camel Netty component
Apache Camel Netty component
 
20120528 aws meister-reloaded-awssd-kforjava-public
20120528 aws meister-reloaded-awssd-kforjava-public20120528 aws meister-reloaded-awssd-kforjava-public
20120528 aws meister-reloaded-awssd-kforjava-public
 
サーバーレスアプリケーションの作り方
サーバーレスアプリケーションの作り方サーバーレスアプリケーションの作り方
サーバーレスアプリケーションの作り方
 
AWS + Windows(C#)で構築する.NET最先端技術によるハイパフォーマンスウェブアプリケーション開発実践
AWS + Windows(C#)で構築する.NET最先端技術によるハイパフォーマンスウェブアプリケーション開発実践AWS + Windows(C#)で構築する.NET最先端技術によるハイパフォーマンスウェブアプリケーション開発実践
AWS + Windows(C#)で構築する.NET最先端技術によるハイパフォーマンスウェブアプリケーション開発実践
 
node+socket.io+enchant.jsでチャットゲーを作る
node+socket.io+enchant.jsでチャットゲーを作るnode+socket.io+enchant.jsでチャットゲーを作る
node+socket.io+enchant.jsでチャットゲーを作る
 
サーバーを作ろう (毎週のハンズオン勉強会の資料)
サーバーを作ろう (毎週のハンズオン勉強会の資料)サーバーを作ろう (毎週のハンズオン勉強会の資料)
サーバーを作ろう (毎週のハンズオン勉強会の資料)
 
Azure Media Services 大全
Azure Media Services 大全Azure Media Services 大全
Azure Media Services 大全
 
Seasarプロジェクト徹底攻略
Seasarプロジェクト徹底攻略Seasarプロジェクト徹底攻略
Seasarプロジェクト徹底攻略
 
20120423 hbase勉強会
20120423 hbase勉強会20120423 hbase勉強会
20120423 hbase勉強会
 
[de:code 2018] ビデオ体験を進化させよう!Media Services で安定した配信のコツと Video AI のポイント
[de:code 2018] ビデオ体験を進化させよう!Media Services で安定した配信のコツと Video AI のポイント[de:code 2018] ビデオ体験を進化させよう!Media Services で安定した配信のコツと Video AI のポイント
[de:code 2018] ビデオ体験を進化させよう!Media Services で安定した配信のコツと Video AI のポイント
 
WindowsAzureの長所を活かすクラウド アプリ開発(PDF版)
WindowsAzureの長所を活かすクラウド アプリ開発(PDF版)WindowsAzureの長所を活かすクラウド アプリ開発(PDF版)
WindowsAzureの長所を活かすクラウド アプリ開発(PDF版)
 

Plus de Yuichiro MASUI

Plus de Yuichiro MASUI (13)

マッシュアップ沖縄版 おまけ:OpenSocail
マッシュアップ沖縄版 おまけ:OpenSocailマッシュアップ沖縄版 おまけ:OpenSocail
マッシュアップ沖縄版 おまけ:OpenSocail
 
OSC2007-niigata - mashup
OSC2007-niigata - mashupOSC2007-niigata - mashup
OSC2007-niigata - mashup
 
Rails 1H
Rails 1HRails 1H
Rails 1H
 
2007/09/29 PHP to Rails - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”
2007/09/29 PHP to Rails - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”2007/09/29 PHP to Rails - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”
2007/09/29 PHP to Rails - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”
 
2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”
2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”
2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”
 
Railsチュートリアル
RailsチュートリアルRailsチュートリアル
Railsチュートリアル
 
InstantRails how to
InstantRails how toInstantRails how to
InstantRails how to
 
PukiWiki
PukiWikiPukiWiki
PukiWiki
 
1時間で作るマッシュアップサービス(関西版)
1時間で作るマッシュアップサービス(関西版)1時間で作るマッシュアップサービス(関西版)
1時間で作るマッシュアップサービス(関西版)
 
Masuidrive Working Style
Masuidrive Working StyleMasuidrive Working Style
Masuidrive Working Style
 
Ruby de Rails
Ruby de RailsRuby de Rails
Ruby de Rails
 
How to build 1 hour mashup site
How to build 1 hour mashup site How to build 1 hour mashup site
How to build 1 hour mashup site
 
Furo Grammer
Furo GrammerFuro Grammer
Furo Grammer
 

AIR+Blaze+Ruby