Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Java HTML 5 WebSocket Avatar

29,919 views

Published on

This presentation explain the strategy for HTML 5 in Java EE 7.

Published in: Technology

Java HTML 5 WebSocket Avatar

  1. 1. Yoshio TeradaJava Evangelisthttp://yoshio3.com, Twitter : @yoshioterada1 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  2. 2. 以下の事項は、弊社の一般的な製品の方向性に関する概要を説明するもので す。また、情報提供を唯一の目的とするものであり、いかなる契約にも組み 込むことはできません。以下の事項は、マテリアルやコード、機能を提供す ることをコミットメント(確約)するものではないため、購買決定を行う際 の判断材料になさらないで下さい。オラクル製品に関して記載されている機 能の開発、リリースおよび時期については、弊社の裁量により決定されます 。 Oracleは、米国オラクルコーポレーション及びその子会社、関連会社の米国及びその他の国における登録商 標です。文中の社名、商品名等は各社の商標または登録商標である場合があります。2 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  3. 3. Make the Future Java(Java の未来を創造)3 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  4. 4. Java EE 7 : 2013年 春頃 提供開始予定 テーマ:HTML5 と開発生産性の向上 Java EE 7 SDK の提供開始4 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  5. 5. Java EE 7 へ含まれる予定の JSR 一覧 JAX-RS Java Caching JSP 2.2 JSF 2.2 EL 3.0 Portable 2.0 API (JSR-107) Extensions Servlet 3.1 Batch Bean Validation 1.1 Application (JSR-352) Common Interceptors 1.1 CDI 1.1 Annotations 1.1 Java API for JSON Managed Bean 1.0 EJB 3.2 (JSR-353) Java API for Connector WebSocket JPA 2.1 JTA 1.2 JMS 2.0 1.6 (JSR-356) 新規追加 大幅な更新 通常の更新5 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  6. 6. Java EE 7 の注目技術6 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  7. 7. 今日ご紹介する内容 HTML5化に関するテーマ7 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  8. 8. JSR 344 :JavaServer™ Faces 2.2 8 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  9. 9. JSF 2.2新機能の一覧 HTML5 マークアップ・サポート – Pass through attributes and elements Faces フロー CSRF (クロス・サイト・リクエスト・フォージェリ) 対策 ResourceHandler 経由で Facelets のロード ファイル・アップロード マルチ・テンプレート9 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  10. 10. JSF : コンポーネント・ベース開発10 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  11. 11. JSFフレームワークと開発の概要 Web コンテナ Web アプリケーションクライアント プレゼン • アプリケーションロジック ビジネスロジック テーション • コンバート (変換) • バリデーション (検証) • ナビゲーション (画面遷移) • イベント処理 DB JavaServer Faces Web サービス 11 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  12. 12. (jsf:value=“”, jsf:action=“”) 今までの開発スタイル JSF 2.0 の開発スタイル コード変換 (XHTML) が必要 デザイナー プログラマー デザイナー プログラマー (HTML) (JSP) 同一ファイルを参照編集可能 デザイナーはテキスト&ブラウザで確認  デザイナーはテキスト&ブラウザで確認 プログラマーはJSP&Webコンテナで確認  プログラマーはXHTMLに要素を挿入 プログラム後のデザイン修正は困難  同一ファイルの為デザイン修正も容易 12 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  13. 13. HTML 5 マークアップ・サポート JSF 2.2 からは 素の HTML コードに JSF 属性を埋め込みましょう!!13 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  14. 14. HTML 5 マークアップ・サポート JSF のライフサイクルに適用可14 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  15. 15. HTML 5 マークアップ・サポート HTML 5 の表現力をそのままに!!15 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  16. 16. HTML 5 マークアップ・サポート<input type=“color” jsf:value=“#{colorBean.color2}”/><input type=“date” jsf:value=“#{calendarBean.date1}” /><keygen jsf:id jsf:value="#{bean.pubKey}"/>標準の HTML 5 タグに jsf:value , jsf:action 等の要素を追加<jsf:element p:elementName="keygen" id=”myKey"p:name="myKey" value="#{bean.myKey}"/>直接要素を JSF ランタイムにスルーも可能 16 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  17. 17. ファイル・アップロード<h:form prependId="false" enctype="multipart/form-data"> <h:inputFile id="fileUpload" value="#{test.upfile}"/> <h:commandButton value="upload" action="#{test.doUpload}"/></h:form>将来的には Ajax 対応(Java EE 7 の正式リリース時)のファイルアップロード機能も提供予定ご参考 : http://yoshio3.com/2012/10/20/jsf22-env-on-gf3122/ 17 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  18. 18. ファイル・アップロード@Named(value = "test")@RequestScopedpublic class TestManagedBean { private javax.servlet.http.Part upfile; public String doUpload() { try { String fileName = getFilename(upfile); upfile.write(fileName); } catch (IOException ex) { ex.printStackTrace(); } return ""; } 18 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  19. 19. マルチ・テンプレート 同一コンテンツに対しテンプレートでデザイン切り替え可能ご参考 : http://jsfmtsystem.appspot.com/ 19 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  20. 20. マルチ・テンプレート同一コンテンツに対しテンプレートでデザイン切り替え可能 <ui:composition template="#{template}">JSF タグ </ui:composition> デフォルトのスキニング ファイル サムネイル facelets のテンプレート メタ・データ テンプレートのディレクトリ構造20 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  21. 21. マルチ・テンプレート 同一コンテンツに対しテンプレートでデザイン切り替え可能 <template> <name>mytemplate</name> <version>1.1</version>コピーライト・契約等が可能 <creationDate>11.22.2012</creationDate> <author>Yoshio Terada</author> <authorEmail>Yoshio.Terada@foo.jp</authorEmail>複数テンプレートの利用が可能 <authorUrl>http://yoshio.com</authorUrl> <copyright>Yoshio Terada</copyright>jar ファイルにパッケージ化 <license>GNU/GPL version 2</license> <description>Yoshio’s Original Template</description> </template> メタ・データの内容ご参考: http://java.net/jira/browse/JAVASERVERFACES_SPEC_PUBLIC-971 21 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  22. 22. JSR 356:JavaTM API for WebSocket22 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  23. 23. 飛行機の事前座席指定23 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  24. 24. オークション24 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  25. 25. 最新情報・更新情報を 取得するために 今どうしていますか?25 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  26. 26. オークション・サイトで更新情報を取得する場合 接続 価格(空席)の 最新情報をくださ 価格(空席) い 情報をくださ い データベース サービス26 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  27. 27. オークション・サイトで更新情報を取得する場合 <HTML> ヘッダー ボタン1の画像 ボタン2の画像 A の価格 余分な広告 2000円 データベース 他へのリンク サービス 製品情報:製品A 製品価格:2000円 製品詳細:これは フッダー </HTML> 切断27 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  28. 28. 再度・更新情報を取得する場合 接続 価格の 最新情報をくださ 価格情報を い ください データベース サービス28 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  29. 29. 再度・更新情報を取得する場合 <HTML> ヘッダー ボタン1の画像 ボタン2の画像 A の価格 余分な広告 4000円 データベース 他へのリンク サービス 製品情報:製品A 製品価格:4000円 製品詳細:これは フッダー </HTML> 切断29 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  30. 30. 1人あたり3回のアクセスで多数の接続・切断接続切断 ….. 製品価格:4000接続 円 …..切断接続 ….. 製品価格:4000切断 円 データベース ….. サービス接続切断 ….. 製品価格:4000接続 円切断 …..接続 …..切断 製品価格:4000 円30 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. …..
  31. 31. システム全体に高負荷31 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  32. 32. 本当に必要な情報は? <HTML> ヘッダー ボタン1の画像 ボタン2の画像 余分な広告 他へのリンク 製品情報:製品A 4000 円 製品価格:4000円 製品詳細:これは… フッダー これだけ </HTML>32 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  33. 33. ネットワーク帯域も無駄33 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  34. 34. WebSocket の背景 – Server Push Polling Long Polling 複雑・非効率・無駄Comet/Ajax34 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  35. 35. WebSocket を使えばどうなる? 接続 接続 2000円 3000円 3000円 データベース サービス 4000円 5000円 6000円 監視プログラムは 6000円 1つのみ 切断35 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  36. 36. 1人辺り接続・切断処理は1度接続切断 受信 送信 受信接続切断 送信 データベース 受信 サービス 受信接続切断 受信 受信 送信 監視プログラムは接続 受信 送信 1つのみ切断 受信36 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  37. 37. 接続・切断数の減少 不要なデータ配信の排除が可能37 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  38. 38. WebSocket とは TCP ベース 双方向・全二重通信 RFC 6455 JavaScript API by W3C38 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  39. 39. ブラウザの対応状況http://caniuse.com/websockets現バージョンの対応状況39 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  40. 40. WebSocket の基本概念 コネクションの確立双方向のメッセージ送信 コネクションの切断40 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  41. 41. コネクションの確立 HandShake リクエスト HandShake レスポンスクライアント サーバ41 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  42. 42. HandShake リクエスト (RFC 6455で定義) GET /mychat HTTP/1.1 Host: server.example.com Upgrade: websocket Connection: Upgrade Sec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw== Sec-WebSocket-Protocol: megachat, chat Sec-WebSocket-Extensions : compress, mux Sec-WebSocket-Version: 13 Origin: http://example.comクライアント サーバ42 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  43. 43. HandShake レスポンス (RFC 6455で定義) HTTP/1.1 101 Switching Protocols Upgrade: websocket Connection: Upgrade Sec-WebSocket-Accept: HSmrc0sMlYUkAGmm5OPpG2HaGWk= Sec-WebSocket-Protocol: chat Sec-WebSocket-Extensions: compress, muxクライアント サーバ43 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  44. 44. コネクションの確立クライアント サーバ44 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  45. 45. WebSocket のライフサイクル 接続確立 Open Open Message Message Message Message Message Message Error Close 接続切断クライアント サーバ45 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  46. 46. WebSocket APIwww.w3.org/TR/websockets/46 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  47. 47. Java API for WebSocket (JSR-356)仕様 http://jcp.org/en/jsr/detail?id=356 http://java.net/projects/websocket-spec ステータス: Early Draft47 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  48. 48. 参照実装http://java.net/projects/tyrus最新の GlassFish v4開発ビルドにバンドル済48 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  49. 49. Java のWebSocket 標準実装はとてもかんたん49 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  50. 50. WebSocket アノテーション アノテーション レベル 内容@WebSocketEndpoint クラス WebSocket のエンドポイントを示す@WebSocketOpen メソッド 接続確立時に呼び出すメソッドを指定@WebSocketClose メソッド 接続切断時に呼び出すメソッドを指定@WebSocketMessage メソッド メッセージを受信した時に呼び出すメソッドを 指定@WebSocketPathParam メソッド エンドポイントのURI 引数に指定されたパラ パラメータ メータを取得する際に仕様@WebSocketError メソッド エラー発生時に呼び出すメソッドを指定 50 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  51. 51. WebSocket アプリケーション・ライフサイクルvar wsUri = "ws://HOST/foo/hello"; @WebSocketEndpoint("/hello")var websocket = new WebSocket(wsUri);websocket.onopen = function(evt) @WebSocketOpen{ onOpen(evt) };websocket.onmessage = function(evt) @WebSocketMessage{ onMessage(evt) };websocket.onerror = function(evt) @WebSocketError{ onError(evt) };websocket.onclose = function(evt) @WebSocketClose{ onClose (evt) }; JavaScript WebSocket API 51 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  52. 52. HelloWorld アプリケーション (1対1)import javax.net.websocket.annotations.*;@WebSocketEndpoint("/hello")public class HelloBean { @WebSocketMessage public void sayHello(Session session, String msg) { session.getRemote().sendString(“Hello” + msg); }} 52 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  53. 53. デモ53 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  54. 54. サンプル・アプリケーションの構成 (多対1) RE Session Twitter4J Session RE 監視 Session Twitter RE WebSocket Endpoint Remote Endpoint54 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  55. 55. Twitter Streaming アプリ@WebSocketEndpoint(value= "/twitter")public class TwitterWebSocket { @WebSocketOpen public void initOpen(Session session) { TwitterClientSingleton.peers.add(session); } @WebSocketClose public void closeWebSocket(Session session){ TwitterClientSingleton.peers.remove(session); }} 55 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  56. 56. Twitter Streaming アプリ@Startup @Singletonpublic class TwitterClientSingleton extends StatusAdapter {public static Set<Session> peers = null; static { peers = Collections.synchronizedSet(new HashSet());}...続く クライアントの参照情報を保持 Session Session Session Session ・・・・・・ RE RE RE RE 56 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  57. 57. データ送信コード (ブロッキング) シーケンシャルに配信を実施 (大量のデータで待ち)public void onStatus(Status status) { User user = status.getUser(); String resStr = "@" +user.getScreenName() + " : " + status.getText() ; try { 全ピア(RE)に対して配信 for (Session peer : peers) { peer.getRemote().sendString(resStr); } } catch (IOException ioe) { ioe.printStackTrace(); Session Session Session Session } } RE RE RE RE 57 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  58. 58. データ送信コード (ノン・ブロッキングfor (Session peer : peers) { Future<SendResult> futureSend = peer.getRemote().sendStringByFuture(resStr); while (!futureSend.isDone()) { // wait here ? } SendResult status = futureSendResult.get(); if (status.isOK()) { // ok } else { // whoops, send failed. }} 58 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  59. 59. こんな場合は Java EE で WebSocket を!!59 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  60. 60. OracleResearch Project !!60 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  61. 61. Project Avatar61 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  62. 62. Project Avatar とはコンセプト 先進的な HTML 5 アプリ構築フレームワーク – WebSocket, Server-Sent Event, RESTful に対応 モジュール化対応 JavaScript フレームワーク 軽量なサーバ・アーキテクチャ (Thin-Server Architecture) Avatar のメリット – サーバ・サイドJavaScript と Java EE アプリの融合 – Java VM 上で稼働する JavaScrip のスケーラビリテイ・信頼性・運用保守性62 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  63. 63. Thin-Server アーキテクチャ (TSA) View HTTP/JS今まで アプリ Model サーバ側でマージ アプリ View View HTTP/JSTSA クライアント側 Model Service JSON でマージ63 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  64. 64. Avatar の概念 (クライアント側) Avatar View (UI Node) (Controller) Model Webコンポーネント • データ・ アクセス方法を提供 と同様 バインディング • ローカル <a:page> • ナビゲーション • RESTful <a:form> • ローカル・ • SSE <a:input> ストレージ • WebSocket <a:textarea> … ブラウザ(JavaScript/DOM)64 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  65. 65. Avatar の概念 (サーバ側) Service Avatar Data プロバイダ アクセス方法を提供 ルーティング 利用可能なデータソー • RESTful JSON のシリアライ ス • ファイル • SSE ズ • DB(JPA) • WebSocket • インメモリ Coherence Nashorn (JavaVMで稼働するJavaScriptエンジン)65 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  66. 66. Avatar のアーキテクチャ Avatar アプリ View Avatar アプリ (HTML 5/JS/CSS) HTTP サービス (XML/JavaScript) Avatar 実行環境 Data HTTP/ サービス Avatar コンパイラ WebSocket Nashorn (JavaScript エンジン) UI HTML 5 DOM Java EE Java EE アプリ ローカルストレージ HTTP/ サービスブラウザ WebSocket App サーバ66 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  67. 67. Avatar のアーキテクチャ Avatar アプリ View Avatar アプリ (HTML 5/JS/CSS) HTTP サービス (XML/JavaScript) Avatar 実行環境 Data HTTP/ ①サービスアプリの作成 Avatar Avatar コンパイラ WebSocket Nashorn (JavaScript エンジン) UI HTML 5 DOM Java EE Java EE アプリ ローカルストレージ HTTP/ サービスブラウザ WebSocket App サーバ67 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  68. 68. Avatar のアーキテクチャ Avatar アプリ View Avatar アプリ (HTML 5/JS/CSS) HTTP サービス (XML/JavaScript) Avatar 実行環境 Data HTTP/ サービス Avatar コンパイラ WebSocket ② Avatar コンパイラで Nashorn (JavaScript エンジン) UI HTML 5 DOM View サービス Java EE サービス Data を生成 Java EE アプリ ローカルストレージ HTTP/ サービスブラウザ WebSocket App サーバ68 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  69. 69. Avatar のアーキテクチャ Avatar アプリ View Avatar アプリ (HTML 5/JS/CSS) HTTP サービス (XML/JavaScript) Avatar 実行環境 Data HTTP/ サービス Avatar コンパイラ③ View サービスの WebSocket Nashorn (JavaScript エンジン) UI HTML 5 DOM 「複数ページの一括」 ダウンロード Java EE (※プラグインは不要) HTTP/ サービス Java EE アプリ ローカルストレージブラウザ WebSocket App サーバ69 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  70. 70. Avatar のアーキテクチャ Avatar アプリ View Avatar アプリ (HTML 5/JS/CSS) HTTP サービス (XML/JavaScript) Avatar 実行環境 Data HTTP/ サービス Avatar コンパイラ WebSocket Nashorn (JavaScript エンジン) UI HTML 5 DOM④ WebSocket/Server-Sent Event/ Java EE RESTful で Data サービスを利用 ローカルストレー Java EE アプリ HTTP/ サービスブラウザ ジ WebSocket App サーバ70 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  71. 71. Avatar のアーキテクチャ Avatar アプリ View Avatar アプリ (HTML 5/JS/CSS) HTTP サービス (XML/JavaScript) Avatar 実行環境 Data HTTP/ サービス Avatar コンパイラ ⑤ サーバ側はJava EE WebSocket Nashorn (JavaScript エンジン) UI HTML 5 DOM のサービスも利用可能 Java EE ローカルストレー Java EE アプリ HTTP/ サービスブラウザ ジ WebSocket App サーバ71 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  72. 72. Avatar のアーキテクチャ Avatar アプリ View Avatar アプリ (HTML 5/JS/CSS) HTTP サービス (XML/JavaScript) Avatar 実行環境 Data HTTP/ サービス Avatar コンパイラ WebSocket Nashorn (JavaScript エンジン) UI HTML 5 DOM ⑥ クライアント側は HTML 5, DOM, Java EE ローカルストレー ローカルストレージ Java EE アプリ HTTP/ サービスブラウザ ジ 等を利用可能 WebSocket App サーバ72 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  73. 73. クライアントで動作するアプリ アプリ View(Hello World) Model<a:viewModule …> <a:page><a:localModel> <a:model id="name" var NameModel = function(){ idref="NameModel"/> this.first = "Planet"; <a:form> this.last = "Earth"; <a:input label="First Name" this.clear = function(){ value="#{name.first}"/> this.first = this.last = <a:input label="Last Name" ""; value="#{name.last}"/> }; <a:output value="Hello }; #{name.first} #{name.last}"/><a:/localModel> <a:button label="Clear" action="#{name.clear()}"/> ローカルのモデルを定義 <a:/form><a:/page><a:/viewModule> 73 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  74. 74. WebSocketで動作するアプリ(Model の実装例) Model JSON Service<a:socketModel> Model 用に用意されているvar ChatModel = function(){ this.message = ""; プロトタイプ関数を上書き実装 this.user = ""; var superSend = this.$send; • this.$onMessage this.$send = function(){ • this.$send this.process(this.message); • etc. superSend.call(this); }; …. };<a:/socketModel> 74 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  75. 75. WebSocketで動作するアプリ(Service の実装例) Model JSON Service<a:socketService Service 用に用意されている url="websocket/chat"> var SocketService = function(){ プロトタイプ関数を上書き実装 this.$onMessage = function(peer,message){ • this.$onMessage this.process(message); • this.$onTimeOut peer.getContext().sendAll(message); • etc. };};<a:/socketService> 75 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  76. 76. New Announcement 2013 年 春頃 Java イベント開催予定76 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  77. 77. 77 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  78. 78. 78 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.

×