SlideShare a Scribd company logo
1 of 32
RatchetでWebSocketを
使ってみたよLT
tDash 2018/1
https://twitter.com/tDash0
自己紹介
• tDash
• フリーランス
• PHPは3.1のころから
• Javaも使う SringBootがスキ
質問1
WebSocket知ってるひと
↓
8割位知ってた
質問2
PHP Ratchet知ってるひと
↓
知ってる人いなかった
WebSocketとは
• 非同期通信のプロトコル
• HTTP1.1をアップデートして使う
WebSocketじゃない通信1
WebSocketじゃない通信2
WebSocketじゃない通信3
レスポンスを受けたら
接続は切れる
WebSocketだと1
WebSocketだと2
WebSocketを使えば
チャットアプリとか
WebSocketを使えば
• リアルタイムオンライン対戦ゲーム
• 閲覧者数表示とか
• Webページ上のチャットとか
• を作ることができる
クライアントでWebSocketを使うには
•WebSocketに対応しているブラウザ
•Internet Explorer 10
•Firefox 6
•Google Chrome 4
•Safari 5
•Opera 12.10
•Unity3Dでも使える
サーバーでWebSocketを使うには
•サーバー側でhttp通信を受ける常駐し
て動作するプログラムが必要
•Node.js
•Tomcat(Java)
•Ratchet(PHP)
•ほか多数
PHPだとRatchetを使うとWebSocketを使える
• http://socketo.me
サーバー内構成
Nginxの設定
Ratchetのインストールはcomposerでかんたん
• composer require cboden/ratchet
書き方(起動箇所)
• <?php
use RatchetServerIoServer;
use RatchetHttpHttpServer;
use RatchetWebSocketWsServer;
use MyPingPing;
require dirname(__DIR__) . ‘/vendor/autoload.php’;
$server = IoServer::factory(
new HttpServer(
new WsServer(
new Ping() ← イベントの処理をするクラス
)
),
12957 ← つかうポート番号を指定する
);
$server->run();
書き方(イベント処理)
• 接続
• メッセージ受信
• 切断
• のイベントを処理するクラスを書く。
onOpen
クライアントから接続されたら onOpen が呼ばれる。
コネクションクラスをコネクションプールに登録。
onMessage
クライアントからメッセージが来たら onMessageメソッドが呼ばれる。
コネクションプールの対象となるコネクションにメッセージを送る。
チャットだったら同じ部屋にいるメンバー全員にメッセージを送るなど。
onClose
切断されたら
onCloseメソッドが呼ばれる。
しかし実際に使うには
• メッセージのキューイングとか複雑な処理が必要
• 過去のメッセージはDBやKVSに格納する機能を作らないといけない
• 改ざん防止機能とか
• ログイン機能とか
• NginxやApacheとの連携機能(プロクシ)
• いろんな機能を作らないといけない
よし!チャットを作ったぞ
• 土日と年末年始の2週間くらいで
作った。
• クライアントはWebアプリを作って
CorodavaでiOSとAndroidアプリに
した。
だが!しかし!
オレは Java で作った
JAVA!
なぜJavaにしたのか
• PHP7.1はJavaっぽくなってるんだけど、微妙にちがってもどかしい。そ
れならいっそJavaにすればいいじゃん!
• オブジェクト指向はやっぱりJava
• 絶対的安心感
• OR Mapper MyBATISが良い。SQL直接書ける。賢いデータマッピング。
• Spring賢い。SpringBoot すごく整ってる。
• でもSpring + MyBatis + StrutsをXMLで 設定するのは超大変。
• mavenいいね。Composerみたいなもの。うーんcomposerよりいいなぁ。
JavaとRatchetでの速度比較
• メッセージ1000回送信するのに
•SpringBootだと 12.082秒
•Ratchetだと 9.343秒
• なんとRatchetの方が早い。
• 単純な動作だけ
• なんでだろ どこかのJARが悪いのか?
• http://localhost:8888/wsping/index.html
telnetでのWebSocket接続テスト
CONNECT localhost:12958 HTTP/1.1
GET ws://localhost:12958/ping/ HTTP/1.1
Host: localhost:12958
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: ae5b468c7707a1f3d36c49b1fe2ef850=
Sec-WebSocket-Version: 13
curlでのWebSocket接続テスト
curl -i -N 
-H "Connection: keep-alive, Upgrade" -H "Upgrade: websocket" 
-H "Sec-WebSocket-Version: 13" 
-H "Sec-WebSocket-Extensions: deflate-stream" 
-H "Sec-WebSocket-Key:ae5b468c7707a1f3d36c49b1fe2ef850==" 
-H "Host: dummylocal:12958" 
-H "Origin:http://dummylocal:12958" http://dummylocal:12958/ping/
unsupported WebSocket version: 8.
ご清聴ありがとうございました
• オレはやっぱりJavaとC言語がすき

More Related Content

What's hot

생각보다 쉬운 webGL - 인터렉티브에 저널리즘 녹이기
생각보다 쉬운 webGL - 인터렉티브에 저널리즘 녹이기생각보다 쉬운 webGL - 인터렉티브에 저널리즘 녹이기
생각보다 쉬운 webGL - 인터렉티브에 저널리즘 녹이기NAVER Engineering
 
Unityで音声認識
Unityで音声認識Unityで音声認識
Unityで音声認識光喜 濱屋
 
JSF2.2で簡単webアプリケーション開発
JSF2.2で簡単webアプリケーション開発JSF2.2で簡単webアプリケーション開発
JSF2.2で簡単webアプリケーション開発Masuji Katoda
 
アクセシビリティvsセキュリティ ~こんな対策はいらない!~
アクセシビリティvsセキュリティ ~こんな対策はいらない!~ アクセシビリティvsセキュリティ ~こんな対策はいらない!~
アクセシビリティvsセキュリティ ~こんな対策はいらない!~ Yoshinori OHTA
 
새해 일어난 일
새해 일어난 일새해 일어난 일
새해 일어난 일Eunhyang Kim
 
우아한유스방
우아한유스방우아한유스방
우아한유스방BYUNGHOKIM10
 
A-Frameで始めるWebXRとハンドトラッキング (HoloLens2/Oculus Quest対応)
A-Frameで始めるWebXRとハンドトラッキング (HoloLens2/Oculus Quest対応)A-Frameで始めるWebXRとハンドトラッキング (HoloLens2/Oculus Quest対応)
A-Frameで始めるWebXRとハンドトラッキング (HoloLens2/Oculus Quest対応)Takashi Yoshinaga
 
ウェブ/アプリのUX改善 データ分析と定性分析の絶妙なバランスは?
ウェブ/アプリのUX改善 データ分析と定性分析の絶妙なバランスは?ウェブ/アプリのUX改善 データ分析と定性分析の絶妙なバランスは?
ウェブ/アプリのUX改善 データ分析と定性分析の絶妙なバランスは?Yoshiki Hayama
 
부스트캠프 웹∙모바일 7기 설명회
부스트캠프 웹∙모바일 7기 설명회부스트캠프 웹∙모바일 7기 설명회
부스트캠프 웹∙모바일 7기 설명회CONNECT FOUNDATION
 
AAA게임_UI_최적화_및_빌드하기.pptx
AAA게임_UI_최적화_및_빌드하기.pptxAAA게임_UI_최적화_및_빌드하기.pptx
AAA게임_UI_최적화_및_빌드하기.pptxTonyCms
 
How To Become Better Engineer
How To Become Better EngineerHow To Become Better Engineer
How To Become Better EngineerDaeMyung Kang
 
【Unite Tokyo 2018】なんとっ!ユナイト!ミリシタをささえる『AKANE大作戦』とは?
【Unite Tokyo 2018】なんとっ!ユナイト!ミリシタをささえる『AKANE大作戦』とは?【Unite Tokyo 2018】なんとっ!ユナイト!ミリシタをささえる『AKANE大作戦』とは?
【Unite Tokyo 2018】なんとっ!ユナイト!ミリシタをささえる『AKANE大作戦』とは?UnityTechnologiesJapan002
 
Umg ,이벤트 바인딩, Invaidation Box
Umg ,이벤트 바인딩, Invaidation BoxUmg ,이벤트 바인딩, Invaidation Box
Umg ,이벤트 바인딩, Invaidation Box대영 노
 
モンスターストライクにおける監視システムのあれこれ
モンスターストライクにおける監視システムのあれこれモンスターストライクにおける監視システムのあれこれ
モンスターストライクにおける監視システムのあれこれYusuke Shirakawa
 
【Unite 2018 Tokyo】Unityにおける疎結合設計 ~UIへの適用事例から学ぶ、テクニックとメリット~
【Unite 2018 Tokyo】Unityにおける疎結合設計 ~UIへの適用事例から学ぶ、テクニックとメリット~【Unite 2018 Tokyo】Unityにおける疎結合設計 ~UIへの適用事例から学ぶ、テクニックとメリット~
【Unite 2018 Tokyo】Unityにおける疎結合設計 ~UIへの適用事例から学ぶ、テクニックとメリット~UnityTechnologiesJapan002
 
HADOにおけるUniRxのObjectPool
HADOにおけるUniRxのObjectPoolHADOにおけるUniRxのObjectPool
HADOにおけるUniRxのObjectPoolYasuyuki Kado
 
이승재, 사례로 배우는 디스어셈블리 디버깅, NDC2014
이승재, 사례로 배우는 디스어셈블리 디버깅, NDC2014이승재, 사례로 배우는 디스어셈블리 디버깅, NDC2014
이승재, 사례로 배우는 디스어셈블리 디버깅, NDC2014devCAT Studio, NEXON
 
빌드관리 및 디버깅 (2010년 자료)
빌드관리 및 디버깅 (2010년 자료)빌드관리 및 디버깅 (2010년 자료)
빌드관리 및 디버깅 (2010년 자료)YEONG-CHEON YOU
 
プロトタイピングとユーザビリティテストで「UXデザイン」を練りあげよう! | UXデザイン基礎セミナー 第4回
プロトタイピングとユーザビリティテストで「UXデザイン」を練りあげよう! | UXデザイン基礎セミナー 第4回プロトタイピングとユーザビリティテストで「UXデザイン」を練りあげよう! | UXデザイン基礎セミナー 第4回
プロトタイピングとユーザビリティテストで「UXデザイン」を練りあげよう! | UXデザイン基礎セミナー 第4回Yoshiki Hayama
 
IT推進に必要なUXを学ぶ ~UXを意識して真の業務改善・真のDXを目指す~
IT推進に必要なUXを学ぶ ~UXを意識して真の業務改善・真のDXを目指す~IT推進に必要なUXを学ぶ ~UXを意識して真の業務改善・真のDXを目指す~
IT推進に必要なUXを学ぶ ~UXを意識して真の業務改善・真のDXを目指す~Yoshiki Hayama
 

What's hot (20)

생각보다 쉬운 webGL - 인터렉티브에 저널리즘 녹이기
생각보다 쉬운 webGL - 인터렉티브에 저널리즘 녹이기생각보다 쉬운 webGL - 인터렉티브에 저널리즘 녹이기
생각보다 쉬운 webGL - 인터렉티브에 저널리즘 녹이기
 
Unityで音声認識
Unityで音声認識Unityで音声認識
Unityで音声認識
 
JSF2.2で簡単webアプリケーション開発
JSF2.2で簡単webアプリケーション開発JSF2.2で簡単webアプリケーション開発
JSF2.2で簡単webアプリケーション開発
 
アクセシビリティvsセキュリティ ~こんな対策はいらない!~
アクセシビリティvsセキュリティ ~こんな対策はいらない!~ アクセシビリティvsセキュリティ ~こんな対策はいらない!~
アクセシビリティvsセキュリティ ~こんな対策はいらない!~
 
새해 일어난 일
새해 일어난 일새해 일어난 일
새해 일어난 일
 
우아한유스방
우아한유스방우아한유스방
우아한유스방
 
A-Frameで始めるWebXRとハンドトラッキング (HoloLens2/Oculus Quest対応)
A-Frameで始めるWebXRとハンドトラッキング (HoloLens2/Oculus Quest対応)A-Frameで始めるWebXRとハンドトラッキング (HoloLens2/Oculus Quest対応)
A-Frameで始めるWebXRとハンドトラッキング (HoloLens2/Oculus Quest対応)
 
ウェブ/アプリのUX改善 データ分析と定性分析の絶妙なバランスは?
ウェブ/アプリのUX改善 データ分析と定性分析の絶妙なバランスは?ウェブ/アプリのUX改善 データ分析と定性分析の絶妙なバランスは?
ウェブ/アプリのUX改善 データ分析と定性分析の絶妙なバランスは?
 
부스트캠프 웹∙모바일 7기 설명회
부스트캠프 웹∙모바일 7기 설명회부스트캠프 웹∙모바일 7기 설명회
부스트캠프 웹∙모바일 7기 설명회
 
AAA게임_UI_최적화_및_빌드하기.pptx
AAA게임_UI_최적화_및_빌드하기.pptxAAA게임_UI_최적화_및_빌드하기.pptx
AAA게임_UI_최적화_및_빌드하기.pptx
 
How To Become Better Engineer
How To Become Better EngineerHow To Become Better Engineer
How To Become Better Engineer
 
【Unite Tokyo 2018】なんとっ!ユナイト!ミリシタをささえる『AKANE大作戦』とは?
【Unite Tokyo 2018】なんとっ!ユナイト!ミリシタをささえる『AKANE大作戦』とは?【Unite Tokyo 2018】なんとっ!ユナイト!ミリシタをささえる『AKANE大作戦』とは?
【Unite Tokyo 2018】なんとっ!ユナイト!ミリシタをささえる『AKANE大作戦』とは?
 
Umg ,이벤트 바인딩, Invaidation Box
Umg ,이벤트 바인딩, Invaidation BoxUmg ,이벤트 바인딩, Invaidation Box
Umg ,이벤트 바인딩, Invaidation Box
 
モンスターストライクにおける監視システムのあれこれ
モンスターストライクにおける監視システムのあれこれモンスターストライクにおける監視システムのあれこれ
モンスターストライクにおける監視システムのあれこれ
 
【Unite 2018 Tokyo】Unityにおける疎結合設計 ~UIへの適用事例から学ぶ、テクニックとメリット~
【Unite 2018 Tokyo】Unityにおける疎結合設計 ~UIへの適用事例から学ぶ、テクニックとメリット~【Unite 2018 Tokyo】Unityにおける疎結合設計 ~UIへの適用事例から学ぶ、テクニックとメリット~
【Unite 2018 Tokyo】Unityにおける疎結合設計 ~UIへの適用事例から学ぶ、テクニックとメリット~
 
HADOにおけるUniRxのObjectPool
HADOにおけるUniRxのObjectPoolHADOにおけるUniRxのObjectPool
HADOにおけるUniRxのObjectPool
 
이승재, 사례로 배우는 디스어셈블리 디버깅, NDC2014
이승재, 사례로 배우는 디스어셈블리 디버깅, NDC2014이승재, 사례로 배우는 디스어셈블리 디버깅, NDC2014
이승재, 사례로 배우는 디스어셈블리 디버깅, NDC2014
 
빌드관리 및 디버깅 (2010년 자료)
빌드관리 및 디버깅 (2010년 자료)빌드관리 및 디버깅 (2010년 자료)
빌드관리 및 디버깅 (2010년 자료)
 
プロトタイピングとユーザビリティテストで「UXデザイン」を練りあげよう! | UXデザイン基礎セミナー 第4回
プロトタイピングとユーザビリティテストで「UXデザイン」を練りあげよう! | UXデザイン基礎セミナー 第4回プロトタイピングとユーザビリティテストで「UXデザイン」を練りあげよう! | UXデザイン基礎セミナー 第4回
プロトタイピングとユーザビリティテストで「UXデザイン」を練りあげよう! | UXデザイン基礎セミナー 第4回
 
IT推進に必要なUXを学ぶ ~UXを意識して真の業務改善・真のDXを目指す~
IT推進に必要なUXを学ぶ ~UXを意識して真の業務改善・真のDXを目指す~IT推進に必要なUXを学ぶ ~UXを意識して真の業務改善・真のDXを目指す~
IT推進に必要なUXを学ぶ ~UXを意識して真の業務改善・真のDXを目指す~
 

Similar to Ratchetでweb socketを使ってみたよ.d0131.pub

websocket-survery
websocket-surverywebsocket-survery
websocket-surveryhogemaru_
 
WebSocketでリアルタイム通信 (第13回学生LT資料)
WebSocketでリアルタイム通信 (第13回学生LT資料)WebSocketでリアルタイム通信 (第13回学生LT資料)
WebSocketでリアルタイム通信 (第13回学生LT資料)stmkza
 
Magic Leap で WebRTC 触ってみた
Magic Leap で WebRTC 触ってみたMagic Leap で WebRTC 触ってみた
Magic Leap で WebRTC 触ってみたNishoMatsusita
 
リアルタイムweb入門
リアルタイムweb入門リアルタイムweb入門
リアルタイムweb入門Hiromu Shioya
 
HTTP2 時代の Web - web over http2
HTTP2 時代の Web - web over http2HTTP2 時代の Web - web over http2
HTTP2 時代の Web - web over http2Jxck Jxck
 
Webページが表示されるまで
Webページが表示されるまでWebページが表示されるまで
Webページが表示されるまでMasataka Suzuki
 
Web chatツール開発 on the 勉強会
Web chatツール開発 on the 勉強会Web chatツール開発 on the 勉強会
Web chatツール開発 on the 勉強会Yutaka Imamura
 
HTML5など社内勉強会 Vol.8 - WebSocket
HTML5など社内勉強会 Vol.8 - WebSocketHTML5など社内勉強会 Vol.8 - WebSocket
HTML5など社内勉強会 Vol.8 - WebSocketGeorge Harada
 
Tizen web app について調べたよ
Tizen web app について調べたよTizen web app について調べたよ
Tizen web app について調べたよNaruto TAKAHASHI
 
20200622 webエンジニアのお仕事 ~開発手法と開発フロー~
20200622 webエンジニアのお仕事 ~開発手法と開発フロー~20200622 webエンジニアのお仕事 ~開発手法と開発フロー~
20200622 webエンジニアのお仕事 ~開発手法と開発フロー~Hikaru Tanaka
 
ネットワーク超入門
ネットワーク超入門ネットワーク超入門
ネットワーク超入門xyzplus_net
 
うしちゃん WebRTC Chat on SkyWayの開発コードw
うしちゃん WebRTC Chat on SkyWayの開発コードwうしちゃん WebRTC Chat on SkyWayの開発コードw
うしちゃん WebRTC Chat on SkyWayの開発コードwKensaku Komatsu
 
Serverlessに触れてみる
Serverlessに触れてみるServerlessに触れてみる
Serverlessに触れてみるteruyaono1
 
WebSocket + Node.jsでつくるチャットアプリ
WebSocket + Node.jsでつくるチャットアプリWebSocket + Node.jsでつくるチャットアプリ
WebSocket + Node.jsでつくるチャットアプリKohei Kadowaki
 

Similar to Ratchetでweb socketを使ってみたよ.d0131.pub (16)

websocket-survery
websocket-surverywebsocket-survery
websocket-survery
 
WebSocketでリアルタイム通信 (第13回学生LT資料)
WebSocketでリアルタイム通信 (第13回学生LT資料)WebSocketでリアルタイム通信 (第13回学生LT資料)
WebSocketでリアルタイム通信 (第13回学生LT資料)
 
Magic Leap で WebRTC 触ってみた
Magic Leap で WebRTC 触ってみたMagic Leap で WebRTC 触ってみた
Magic Leap で WebRTC 触ってみた
 
リアルタイムweb入門
リアルタイムweb入門リアルタイムweb入門
リアルタイムweb入門
 
Webページで学ぶJavaScript2013 第7回
Webページで学ぶJavaScript2013 第7回Webページで学ぶJavaScript2013 第7回
Webページで学ぶJavaScript2013 第7回
 
HTTP2 時代の Web - web over http2
HTTP2 時代の Web - web over http2HTTP2 時代の Web - web over http2
HTTP2 時代の Web - web over http2
 
Webページが表示されるまで
Webページが表示されるまでWebページが表示されるまで
Webページが表示されるまで
 
Web chatツール開発 on the 勉強会
Web chatツール開発 on the 勉強会Web chatツール開発 on the 勉強会
Web chatツール開発 on the 勉強会
 
HTML5など社内勉強会 Vol.8 - WebSocket
HTML5など社内勉強会 Vol.8 - WebSocketHTML5など社内勉強会 Vol.8 - WebSocket
HTML5など社内勉強会 Vol.8 - WebSocket
 
Tizen web app について調べたよ
Tizen web app について調べたよTizen web app について調べたよ
Tizen web app について調べたよ
 
20200622 webエンジニアのお仕事 ~開発手法と開発フロー~
20200622 webエンジニアのお仕事 ~開発手法と開発フロー~20200622 webエンジニアのお仕事 ~開発手法と開発フロー~
20200622 webエンジニアのお仕事 ~開発手法と開発フロー~
 
ネットワーク超入門
ネットワーク超入門ネットワーク超入門
ネットワーク超入門
 
うしちゃん WebRTC Chat on SkyWayの開発コードw
うしちゃん WebRTC Chat on SkyWayの開発コードwうしちゃん WebRTC Chat on SkyWayの開発コードw
うしちゃん WebRTC Chat on SkyWayの開発コードw
 
AndroidでWebSocket
AndroidでWebSocketAndroidでWebSocket
AndroidでWebSocket
 
Serverlessに触れてみる
Serverlessに触れてみるServerlessに触れてみる
Serverlessに触れてみる
 
WebSocket + Node.jsでつくるチャットアプリ
WebSocket + Node.jsでつくるチャットアプリWebSocket + Node.jsでつくるチャットアプリ
WebSocket + Node.jsでつくるチャットアプリ
 

Ratchetでweb socketを使ってみたよ.d0131.pub