Presentation is loading. Please wait.

Presentation is loading. Please wait.

クラウド上での リアルタイム・非同期・双方向通信アプリケーション開発基礎

Similar presentations


Presentation on theme: "クラウド上での リアルタイム・非同期・双方向通信アプリケーション開発基礎"— Presentation transcript:

1 クラウド上での リアルタイム・非同期・双方向通信アプリケーション開発基礎

2 アジェンダ Windows Azure 概要 SignalR ハンズオン ラボについて 情報リソース

3 Windows Azure 概要

4 (ACS & Active Directory)
Windows Azure 概要 Windows Azure のサービス群 仮想マシン (Virtual Machines) クラウド サービス (Cloud Services) Web サイト (Web Sites) SQL データベース (SQL Database) ストレージ (Storage) コンテンツ配信 (CDN) メディア配信 (Media) アクセス制御&AD (ACS & Active Directory) サービス バス (Service Bus) キャッシュ (Caching) 仮想ネットワーク (Virtual Network) トラフィック管理 (Traffic Manager)

5 Windows Azure 概要 Windows Azure のデータセンター データセンター CDN

6 Windows Azure 概要 コンピューティングの 3 つの選択肢 オンプレミス アプリケーション アプリケーション アプリケーション
仮想マシン クラウド サービス Web サイト アプリケーション アプリケーション アプリケーション アプリケーション データ データ データ データ ファイアウォール ファイアウォール ファイアウォール ネットワーク 仮想ネットワーク 仮想ネットワーク OS OS 仮想化 ハードウェア オンプレミス

7 SignalR

8 SignalR SignalR とは? リアルタイムかつ双方向の通信を簡単に実現 NuGet (パッケージマネージャ)を通じて提供
考え方はリモートプロシージャコール サーバからクライアントへのプッシュが可能 NuGet (パッケージマネージャ)を通じて提供

9 SignalR SignalR を利用するシナリオ サーバからのプッシュを利用する リアルタイム、双方向通信を利用する
ステータスの変化を即座に通知 (Ex. Windows Azure 管理ポータル, Facebook) リアルタイム、双方向通信を利用する メッセージの送受信 (Ex. チャット、サービス内 API)

10 SignalR SignalR のアーキテクチャ クライアント SignalR サーバ サーバのレスポンス サーバへのリクエスト
(ブロードキャスト) サーバへのリクエスト (メソッド呼び出し)

11 SignalR サーバサイドの仕組み ASP.NET 上に構築されている API エンドポイント “Hub”
Web Forms, MVC, Web Pages などと共存可能 API エンドポイント “Hub” クライアントから呼び出し可能なメソッドの集合 SomeMethod_1 SomeMethod_2 Hub_1 SomeMethod_1 Hub_2

12 SignalR サーバサイドの実装 Hub の実装例 クライアントに公開する名前 クライアントから呼び出し可能なメソッド
[HubName("chat")] public class ChatHub : Hub { public void SendMessage(string text) Clients.ReceiveMessage(text); } クライアントから呼び出し可能なメソッド

13 SignalR サーバから利用できる情報 Hub クラスに実装されているプロパティ Context Groups Clients
現在のリクエスト情報を保持 Groups グループを管理するクラス Clients SignalR で管理している全てのクライアントを表す Caller リクエストを行ったクライアントを表す

14 SignalR サーバ-クライアント間接続の仕組み SignalR がクライアントを管理 クライアントごとに一意なコネクションIDを発行
ネゴシエーション ConnectionId = CAB9F88C A150-1A870583BCDA コネクションID発行

15 クライアントとサーバのメソッド名 が対応している
SignalR クライアントからサーバ サーバに用意されたメソッドを呼び出す クライアントは戻り値を取ることが出来る サーバの メソッド呼び出し chat.invoke("SendMessage", text); public void SendMessage(string text) { } クライアントとサーバのメソッド名 が対応している

16 クライアントとサーバのメソッド名 が対応している
SignalR サーバからクライアント クライアントに登録されたメソッドを呼び出す サーバは戻り値を取ることが出来ない クライアントの メソッド呼び出し chat.on("ReceiveMessage", function(text) { }); Clients.ReceiveMessage(text); クライアントとサーバのメソッド名 が対応している

17 SignalR 接続のグルーピング クライアントをグループ化して管理 グループごとの 操作が可能 グループA グループB

18 SignalR 接続のグルーピング グループに接続を追加する実装 [HubName("chat")]
public class ChatHub : Hub { public void JoinGroup(string groupName) Groups.Add(Context.ConnectionId, groupName); } public void LeaveGroup(string groupName) Groups.Remove(Context.ConnectionId, groupName); グループに追加 グループから削除

19 SignalR グループへのメソッド呼び出し グループへのメソッド呼び出し [HubName("chat")]
public class ChatHub : Hub { public void SendMessage(string groupName, string text) Clients[groupName].ReceiveMessage(text); } グループに対してメソッド呼び出し

20 SignalR クライアントサイドの実装 各種クライアントライブラリを提供 SignalR と同様に NuGet を通じて提供
JavaScript (SignalR と同時にインストール) .NET Framework 4.5 / Windows Store アプリ Silverlight 4 / 5 SignalR と同様に NuGet を通じて提供

21 SignalR クライアントサイドのライブラリ JavaScript コールバック、jQuery.Deferred を使う
var connection = $.hubConnection(); var chat = connection.createProxy("chat"); chat.on("ReceiveMessage", function(message) { alert(message); }); connection.start(function() { chat.invoke("SendMessage", "text message");

22 SignalR クライアントサイドのライブラリ .NET Framework 4.5 / Windows Store アプリ
async / await 記法を使う var connection = new HubConnection(" var chat = connection.CreateProxy("chat"); chat.On<string>("ReceiveMessage", message => MessageBox.Show(message)); await connection.Start(); chat.Invoke("SendMessage", "text message");

23 SignalR クライアントサイドのライブラリ Silverlight 4 / 5 Task ベースの API をそのまま使う
var connection = new HubConnection(" var chat = connection.CreateProxy("chat"); chat.On<string>("ReceiveMessage", message => MessageBox.Show(message)); connection.Start().ContinueWith(p => { chat.Invoke("SendMessage", "text message"); });

24 WebSocket, SSE, Frame, Long-polling
SignalR SignalR で使われている技術 複数のトランスポート(接続)をサポート WebSocket (IIS 8 と .NET 4.5 の組み合わせ) Server-Sent Events (SSE) Infinity Frame Long-polling トランスポート WebSocket, SSE, Frame, Long-polling

25 > > > SignalR トランスポートとブラウザの関係 自動的にトランスポートを切り替える WebSocket :
Server-Sent Events : Infinity Frame : Long-polling : 古いブラウザ > > >

26 SignalR スケールアウトの問題点 永続的なコネクションをインスタンス毎に作成 単純に数を増やすだけでは対応できない インスタンス0
インスタンス1

27 SignalR スケールアウト インスタンス間で接続を共有する必要がある メッセージングを利用する 接続情報の共有 インスタンス0
インスタンス1

28 SignalR メッセージングを使ってスケールアウト Pub/Sub 型のメッセージングを利用 プラグインとして NuGet 経由で提供
Windows Azure サービスバス Redis (Windows Azure Virtual Machine) プラグインとして NuGet 経由で提供 SignalR.WindowsAzureServiceBus SignalR.Redis

29 SignalR Pub/Sub 型のメッセージング Windows Azure サービスバス メッセージの流れ トピック1
サブスクライバー (インスタンス1) トピック2 パブリッシャー (インスタンス0) サブスクライバー (インスタンス2) トピック3

30 SignalR 実際のスケールアウト例 Windows Azure サービスバス Redis インスタンス0 インスタンス1 接続情報の共有

31 SignalR Windows Azure と Redis の比較 メッセージ数課金 スケールアウト 時間課金 スケールアウト
\0.88/10000 メッセージ スケールアウト トピック数を増やす 時間課金 Sインスタンス \7.00/h スケールアウト サーバを増やす 非常に容易 Redis 自体の知識が要求される

32 SignalR まとめ SignalR を利用するメリット 開発者は機能の実装に 集中できる シンプルなクライアント・サーバ API
非同期・マルチスレッドで動作 最新・最適な通信方式を自動選択 スケールアウトが非常に容易 クライアント・グループ管理が用意済み 開発者は機能の実装に 集中できる

33 ハンズオン ラボについて

34 ハンズオン ラボの演習内容 演習1:簡単なSignalRアプリケーションの開発 演習2:チャットアプリケーションの開発
Windows Azure Web Sites へのデプロイまで 演習2:チャットアプリケーションの開発 より実践的なアプリケーションの開発 演習3:(おまけ)Windows Azureへ配置し、 スケールアウトを行う 複数インスタンス上での動作を確認

35 情報リソース

36 情報リソース Windows Azure 関連 Windows Azure 管理ポータルサイト Windows Azure 情報サイト
Windows Azure 情報サイト Windows Azure SDK ドキュメント Windows Azure Team Blog (英語) Windows Azure 開発ツール ダウンロード Windows Azure 管理ツール ダウンロード Windows Azure Platform Training Kit (英語)

37 情報リソース SignalR 関連 SignalR 公式サイト (英語) SignalR – GitHub プロジェクトサイト (英語)
SignalR – GitHub プロジェクトサイト (英語) SignalR – Wiki ページ (英語) SignalR – Twitter (英語) SignalR – NuGet Gallery

38


Download ppt "クラウド上での リアルタイム・非同期・双方向通信アプリケーション開発基礎"

Similar presentations


Ads by Google