Recommended
PDF
PDF
PDF
PPTX
PDF
Akka-Streams in Production
PDF
PDF
PDF
プログラミング言語のパラダイムシフト(ダイジェスト)ーScalaから見る関数型と並列性時代の幕開けー
PDF
PDF
Real World Android Akka - 日本語版
PDF
PlaySQLAlchemyORM2017.key
PDF
PDF
Scala Warrior and type-safe front-end development with Scala.js
PPTX
Akkaの翻訳みんなでやろう Let's translate akka doc
PDF
PPTX
【LT】akka receive とScala Javaの違い
PDF
PDF
Seasar ユーザだったプログラマが目指す OSS の世界展開 #seasarcon
PDF
The state of sbt 0.13, sbt server, and sbt 1.0 (ScalaMatsuri ver)
PDF
Servlet と Future の関わり方 #scala_ks
PDF
PDF
PDF
PDF
PDF
Quasar: Actor Model and Light Weight Threads on Java
PDF
Scala再入門 @2014/02/08 Scala関西ビギナーズ第3回
PPTX
Developing an Akka Edge1-3
PPTX
Developing an Akka Edge4-5
PDF
PlayFramework 2.0 Javaと WebSocketでつくる リアルタイムMVC Webアプリケーション
PDF
Play framework 2.0のおすすめと1.2からのアップグレード
More Related Content
PDF
PDF
PDF
PPTX
PDF
Akka-Streams in Production
PDF
PDF
PDF
プログラミング言語のパラダイムシフト(ダイジェスト)ーScalaから見る関数型と並列性時代の幕開けー
What's hot
PDF
PDF
Real World Android Akka - 日本語版
PDF
PlaySQLAlchemyORM2017.key
PDF
PDF
Scala Warrior and type-safe front-end development with Scala.js
PPTX
Akkaの翻訳みんなでやろう Let's translate akka doc
PDF
PPTX
【LT】akka receive とScala Javaの違い
PDF
PDF
Seasar ユーザだったプログラマが目指す OSS の世界展開 #seasarcon
PDF
The state of sbt 0.13, sbt server, and sbt 1.0 (ScalaMatsuri ver)
PDF
Servlet と Future の関わり方 #scala_ks
PDF
PDF
PDF
PDF
PDF
Quasar: Actor Model and Light Weight Threads on Java
PDF
Scala再入門 @2014/02/08 Scala関西ビギナーズ第3回
PPTX
Developing an Akka Edge1-3
PPTX
Developing an Akka Edge4-5
Similar to WebSocket+Akka(Remote)+Play 2.1 Java
PDF
PlayFramework 2.0 Javaと WebSocketでつくる リアルタイムMVC Webアプリケーション
PDF
Play framework 2.0のおすすめと1.2からのアップグレード
KEY
PDF
PDF
PDF
プログラミング言語のパラダイムシフトーScalaから見る関数型と並列性時代の幕開けー
PDF
PDF
PDF
197x 20090704 Scalaで並行プログラミング
PDF
PDF
PlayFramework1.2.4におけるWebSocket
PDF
PDF
Play framework 2.0のちょっとした紹介
KEY
PDF
PDF
第2回 -Play部屋- Play 2.0はじめて&もくもく会
PDF
Typesafe Reactive Platformで作るReactive System
PDF
Typesafe Reactive Platformで作るReactive System入門
PDF
PDF
More from Kazuhiro Hara
PDF
PDF
PDF
PDF
(IDEユーザのための) ClojureのEmacs開発環境について
PDF
PDF
React系(別言語含む)の サーバーサイドレンダリング について考えよう
PDF
Playbay Play 2.0 plugin イロハのイ
PDF
PDF
PDF
Clojure の各種React系ラッパーライブラリのサーバーサイドレンダリングの現状について
PDF
PDF
PDF
buddyのユーザ認証周りのデータ構造 - 使われているデータの取り回しについてのお話
PDF
-Play部屋- Play 2.0はじめて&もくもく会
PDF
PDF
クリーンな WordPress サイトのための PHP コーディングのお作法 ― 計画的に WordPress を拡張していくためのフレームワーク思考 |...
PDF
PDF
PDF
About Plone Conference Tokyo 2018 Frontend Day
PDF
WP Jelly vol.01 WordPress管理画面にメニューを追加しよう
WebSocket+Akka(Remote)+Play 2.1 Java 1. SPDY+WS勉強会(仮)
WebSocket
+ Akka (Remote) +
Play framework 2.1 Java
原 一浩 @kara_d
2. 自己紹介
ハラ カズヒロ
原 一浩 ( @kara_d )
グレーティブ合同会社代表
http://greative.jp/
Playはじめて&もくもく会主宰
Scala conferenceスポンサー
日本Play frameworkユーザー会参加
コワーキングスペース茅場町Co-Edo
2
3. アジェンダ
➡ Play 2.1 JavaとWebSocket
➡ Akkaについて
➡ WebSocketとAkkaとJava
➡ Akka Remoteによる並列、分散処理
※今回は、文字数節約のためにPlay 2.1 JavaのことをPlayと呼ぶことに
しました
3
4. 5. Play frameworkとは?
➡ Zenexity(フランスの会社)
➡ Typesafe(Scala総本山、Martin Odersky氏など)
特徴とされているもの
➡ ノンブロッキングIO採用
➡ パワフルなコンソールとシンプルなビルドツール
➡ ステートレスかつウェブ向き
➡ 型安全的
➡ IDEサポート
➡ Java/Scalaで開発
➡ モジュール的の高いフルスタックFW
5
6. Play バージョン 2.xについて
➡ ∼2012/2
Play 1.x:Javaベース、Groovyテンプレート、 Hibernate独自拡張、
Pythonによるビルドシステム、WebSocketは1.2から
➡ 2012/2
Play 2.0:Scalaベース、Java/Scala両方で開発可能、
JavaのORMはEBean、Scalaテンプレート、SBTによるビルド
➡ 2013/2
Play 2.1:フォルダやビルド構成の見直し、
各種ライブラリのバージョンアップ、Scalaのバージョンアップ
6
7. PlayでWebSocketコンテンツの魅力
➡ MVCFWを使ったのWebアプリケーションに
ちょこっと導入とかもできちゃう
普通のコントローラーと同じ感覚でWebSocketの処理を書ける
ルーティングも同じ感じ
➡ 必要に応じて分散処理を組める
Akkaつかう
7
8. 9. SPDYサポート周り
➡ Using SPDY and HTTP transparently using
Netty ¦ Smartjava.org
http://www.smartjava.org/content/using-spdy-and-http-
transparently-using-netty
➡ Nettyが3.3.1でSPDYに対応したぽいので
がんばればできるのかも
9
10. 11. Akkaってなに?
➡ Typesafe社の開発
➡ アクターモデルをベースにした非同期処理、並行処理
➡ リモーティングによる分散処理
➡ アクターの管理と耐障害性(let-it-crash)
➡ 設定との分離によって位置透過性を担保
➡ ソフトウェアトランザクショナルメモリ
➡ 非同期、スケジューリング、イベント処理にも使える
11
12. ActorRef … アクターのキモ
➡ Akkaのアクターへの参照
➡ アクターモデル
並行計算の数学的モデルの一種
アクターモデルの基本は「全てのものはアクターである」という哲学
アクターは並行的に受信するメッセージに対応した以下のような振る舞いを備えた計算実体(Computational
Entity)である
他のアクターとの通信は非同期に発生する
- wikipedia
Actor Actor
onReceive(o)
( Object ) onReceive(o)
Do
12
13. アクターへのメッセージパッシング
➡ tellとaskがある
tell
なげっぱ。fire-and-forget。
void tell(Object msg, ActorRef sender)
ask
Future型でかえってくる
Future ask(ActorRef actor, Object message, long timeout)
13
14. 15. 16. Play 2.1 Java + WebSocketの全体像
Model JsonNode
ActorRef
onReceive(o) Out
Client
Handshake
Controller
tell(Object message) WebSocket<T>
JavaScript
onReady()
WebSocket
In JsonNode
onMessage()
onClose()
16
17. Play WebSocket with Akkaまとめ
➡ 通信は双方向かつリアルタイムに行われる(普通)
➡ WebSocketにはInとOutがある
WebSocket.In<JsonNode> in
WebSocket.Out<JsonNode> out
➡ JSON or String(つまりTextFrame)で
通信をしている(BinaryFrameとか、MixedFrameとかも)
➡ 非同期なイベントを管理するためにAkkaを使う
(使わないこともできる)
17
18. Akkaのイベントシステムについて(1)
➡ Akka Javaは、UntypedActorをよく使う
➡ UntypedActorはObjectでメッセージを送受信する
➡ Scala版では、パターンマッチですっきり書ける
※Scala版はObject型というわけではない
def
receive
=
{
case
Join(username)
=>
{
...
}
case
Talk(username,
text)
=>
{
...
}
case
Quit(username)
=>
{
...
}
}
18
19. Akkaのイベントシステムについて(2)
➡ Akka Javaでは、メッセージがObjectなので、普通に
書くとこうなる
if(message
instanceof
Join)
{
Join
join
=
(Join)message;
...
}
else
if(message
instanceof
Talk)
{
Talk
talk
=
(Talk)message;
...
}
else
if(message
instanceof
Quit)
{
Quit
quit
=
(Quit)message;
...
}
else
{
unhandled(message);
}
19
20. Akka Javaのメッセージパッシング判定(1)
➡ イベントはTypesafe Enumで定義しておく
WebSocketのイベントはだいたい決まっている
public
enum
WebSocketEvent
{
JOIN
{
String
init()
{
return
...
}
},
MESSAGE
{
String
init()
{
return
...
}
},
QUIT
{
String
init()
{
return
...
}
};
abstract
String
init();
}
20
21. Akka Javaのメッセージパッシング判定(2)
➡ イベント処理をScalaっぽく書く
Javaではイベント用のinterfaceと、PlayのOptionと、
Enumを使ってこうなる
Option<Message>
event
=
EventUtil.getEvent(message);
if(event.isDefined()){
switch
(event.get().getEventType())
{
case
JOIN:
...
break;
case
MESSAGE:
...
break;
case
QUIT:
...
break;
default:
unhandled(message);
break;
}
}
21
22. 23. 24. 25. Akka Remote
➡ Akka Remoteを使うと、Akka Actorをリモートで
アクセス可能になる
➡ Play 2.1の場合
"com.typesafe.akka" %% "akka-remote" % "2.1.2"
➡ 通信は、TCPやUDPが使える
➡ セキュリティ対応も可能
25
26. Akka Remoteはこれができる(1)
➡ 設定により、アクターの所在を決めることができる
master
{
akka
{
actor
{
provider
=
"akka.remote.RemoteActorRefProvider"
}
remote
{
transport
=
"akka.remote.netty.NettyRemoteTransport"
netty
{
hostname
=
"127.0.0.1"
port
=
0
}
}
}
}
26
27. Akka Remoteはこれができる(2)
➡ アクターへのリファレンス先が別ホストとかに!
//
アクターのインスタンス
public
final
static
ActorRef
actor
=
system.actorFor("akka://master2@127.0.0.1:2258/user/master2");
27
28. 29. すごくシンプルなサンプル
➡ Playが2つ起動
それぞれにアクターがいる
➡ 片方のPlayにアクセスがあると
URLに書かれたパラメータを、もう一方のアクターに
tellする
➡ 送受信したメッセージがそれぞれターミナルに表示
29
30. Akka RemoteとWebSocket
➡ WebSocketは、どうしても接続用サーバに
負荷がかかる
モデルとかログとか別サーバーに、プログラマブルな形で透過的に使いたい
➡ リアルタイムアプリケーションは、
同時にいろいろなことが発生する
並行処理をAkka Remoteに非同期にまかせる
30
31. Actor RemoteによるMVCの分散
Database ViewModel
Actor
Actor
Message
Model Controller
Message
Actor Actor
Log
Actor
31
32.