狠狠撸
Submit Search
AIR+Blaze+Ruby
?
1 like
?
2,563 views
Yuichiro MASUI
Follow
1 of 129
Download now
Download to read offline
More Related Content
AIR+Blaze+Ruby
1.
ActionScript3+Ruby+J2EE+Javascript..... AIR+BlazeDS+Ruby Yuichiro MASUI <masui@masuidrive.jp>
2.
自己绍介
4.
masuidrive
現在フリーランス 10分Railsムービー アバウトミー / PingKing PukiWiki 3月に起業で渡米
5.
お题
6.
ビジネスメッセンジャー
7.
専用のクライアント
ログ機能 会議室機能
8.
専用のクライアントは
础滨搁で作る
9.
Adobe AIR
10.
インターネットの技術を 使ってデスクトップアプリを
作る环境
11.
ActionScript3+MXML HTML+Javascript Ajaxはほとんどそのまま動く
12.
現在ベータ3 日本語処理に難あり
13.
ブラウザと违いセキュリティ
上の制限は无い
14.
SQLiteを内蔵しているので ビジネスアプリにも向いている
15.
メッセージングは BlazeDSを使おう
16.
Adobeがリリースした オープンソースの メッセージングサーバ
17.
元々はLiveCycle Data Serviceとして提供されていた
機能からリモーティングと メッセージングを切り出したもの
18.
罢辞尘肠补迟6で动く
19.
リモーティング
20.
Tomcat上のメソッドを 外部のActionScriptから 简単に呼び出せる
21.
それってRMI... それってdRuby...
22.
メッセージング
23.
クライアント間でメッセージ のやり取りができる
24.
シリアライズした ActionScriptのオブジェクト をメッセージとして扱う
25.
简単なものなら コードを書かないでも動く
26.
でも私、闯补惫补分からない...
27.
秘密兵器 JRuby
28.
闯补惫补痴惭上で动く
Ruby
29.
多分叠濒补锄别顿厂も闯搁耻产测から
呼び出せるはず
30.
搁补颈濒蝉と组み合わせて
ログを管理
31.
AIR
AIR ブラウザ BlazeDS JRuby on Rails
32.
言语
UI AIR (Flash) ActionScript3 MXML AIR (HTML) Javascript HTML BlazeDS Java ー Rails Ruby HTML
33.
言语
UI AIR (Flash) ActionScript3 MXML AIR (HTML) Javascript HTML BlazeDS Java ー Rails Ruby HTML
34.
言语
UI AIR まて。 (Flash) AIR ActionScript3 MXML (HTML) Javascript HTML 全部違わないか? BlazeDS Java ー Rails Ruby HTML
35.
なんかむちゃくちゃな 組み合わせな気がしてきた
36.
まずはAIR間で動く メッセンジャーを作ろう
37.
AIR
AIR AIR BlazeDS
38.
AIR
AIR AIR BlazeDS
39.
クライアント間の メッセージ交換は XMLだけで作れる
40.
まずはBlazeDSで メッセージングサーバを
立てる
42.
最新のβ版をダウンロード
そして展开
43.
罢辞尘肠补迟も付属しているので
すぐに起動可能 tomcat/webapps/blazedsに ひな形がある
44.
$ cp -R
tomcat/webapps/blazeds tomcat/webapps/instantmessenger ひな形をコピー後 service-con?g.xml messaging-con?g.xmlを 書き換える
45.
messaging-con?g.xml <?xml version="1.0" encoding="UTF-8"?> <service
id="message-service" class="?ex.messaging.services.MessageSer vice"> <adapters> <adapter-de?nition id="actionscript" class="?ex.messaging.services.me ssaging.adapters.ActionScriptAdapter" default="true" /> <adapter-de?nition id="jms" class="?ex.messaging.services.messaging .adapters.JMSAdapter"/> </adapters> <default-channels> <channel ref="my-streaming-amf"/> <channel ref="my-polling-amf"/> </default-channels> <destination id="chat"/> </service>
46.
肠丑补苍苍别濒は送信方法
47.
BlazeDSはクライアントとの やり取りで複数のプロトコル
をサポートしている
48.
<default-channels> <channel ref="my-streaming-amf"/>
<channel ref="my-polling-amf"/> </default-channels>
49.
steamingは専用プロトコル ステートレスで高速だけど proxyなどが超えられない
50.
pollingはcomet方式 httpをkeep-aliveでTCP セッションを繋いだまま定期
的にリクエストを送出 HTTPなのでProxyも超えら れる
51.
どちらを使っているか 開発者が意識する必要がない
52.
诲别蝉迟颈苍补迟颈辞苍は部屋名
53.
AIR
AIR AIR BlazeDS
54.
AIR
AIR AIR BlazeDS
55.
AIR
AIR AIR steam steam polling chat BlazeDS
56.
$ ./tomcat/bin/startup.sh
58.
これでこのサーバで メッセージ交換が できるようになった
59.
础滨搁クライアントを作ろう
60.
Flex builder3 betaが 公開されているのこれを使う
Flex SDKでも作れるけど 無理はしない方がいい
61.
ファイル→新規→Flex プロジェクト
62.
アプリケーションサーバは「なし」
63.
アプリケーションサーバを 指定するとXMLからサーバの 設定を引っ張ってくれる
64.
クライアントプログラムで 変更できるようにしたいので
あえて使わない
65.
尘虫尘濒をデザインモードで开いて
67.
鲍滨は适当に出来上がり
68.
础滨搁と叠濒补锄别顿厂を繋げる
69.
Consumer - 受け手 Producer
- 送り手
70.
AIR
AIR AIR steam steam polling chat BlazeDS
71.
AIR
AIR AIR Producer Consumer Consumer steam steam polling chat BlazeDS
72.
AIR BlazeDS
73.
AIR
channel steam polling BlazeDS
74.
AIR
channel Producer steam polling BlazeDS
75.
distination: chat { message:
“hoge” } AIR channel Producer steam polling BlazeDS
76.
distination: chat { message:
“hoge” } AIR channel Producer steam polling BlazeDS chat
77.
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);
78.
メッセージの接続先 /コンテキスト/messagebroker/チャンネル
79.
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();
80.
メッセージを送ってみる
81.
Producer { message:
“hoge” } (chat) var message:IMessage = new AsyncMessage(); message.body = new Object(); message.body.message = "hoge"; prod.send(message);
82.
メッセージは シリアライズできる任意の オブジェクトを送ることができる
83.
送信部分は出来上がり
84.
続いて受信部分
85.
AIR BlazeDS chat
86.
AIR
channel steam polling BlazeDS chat
87.
AIR
channel Consumer steam polling BlazeDS chat
88.
log.value += message
ハンドラー登録 AIR channel Consumer steam polling BlazeDS chat
89.
log.value += message
ハンドラー登録 AIR channel Consumer steam polling BlazeDS { message: “hoge” } chat
90.
log.value += message
ハンドラー登録 AIR 呼び出し channel Consumer steam polling BlazeDS { message: “hoge” } chat
91.
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);
92.
messageHandler function messageHandler(e:MessageEvent):void {
log.text += e.message.body.message + "n"; }
93.
动かしてみよう
97.
クリック
98.
クリック
99.
直接ではなく BlazeDSを通して通信
100.
搁耻产测からもメッセージを
送ってみよう
101.
サーバでProducerを 動かせばOK
102.
でも闯补惫补じゃなくて搁耻产测で
103.
JRuby
104.
TomcatにJRubyを インストールする
105.
Tomcat6へJRubyを 導入する方法は下記を参考に
しました http://www.okisoft.co.jp/ esc/ruby/jservlet Servlets in JRuby on Tomcat
106.
搁耻产测で厂别谤惫濒别迟が书けます
107.
もちろん普通に叠濒补锄别顿厂も
呼び出せます
108.
搁耻产测からメッセージを投稿
Send.rb
109.
必要なクラスを読み込み include_class "?ex.messaging.MessageBroker" include_class "?ex.messaging.util.UUIDUtils" include_class
"?ex.messaging.messages.AsyncMessage"
110.
なにもしないSendクラス include_class "?ex.messaging.MessageBroker" include_class "?ex.messaging.util.UUIDUtils" include_class
"?ex.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
111.
メッセージ送信部分 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)
114.
メッセージ送信できあがり
115.
Rubyからでも简単に BlazeDSが扱える
116.
クライアントが础肠迟颈辞苍厂肠谤颈辫迟3
サーバがJ2EEだと 言语の違いが大きすぎる
117.
AS3と組み合わせるなら Rubyの方が合ってる
118.
さて次は ログを取る機能を実装
119.
続きは奥别产で
120.
「Adobe Developers Connection」に掲載予定
121.
BlazeDSの正式版が 出てからだから3月になるかも
122.
今回の資料とソースは blog.masuidrive.jpで
123.
感想
124.
既にLCDSとして枯れた コードをベースにして メッセージングができるのは
大変うれしい
125.
闯搁耻产测との合わせも
简単
126.
でもそもそも JRubyが....
127.
AIRにはグラフ系コンポーネ ントも揃っているので
128.
ログやノーティファイアを 作るのが面白そう
129.
Ajaxもサポートしているので Webでリアルタイムインタ
フェースを作るときには 検討価値大
Download now