SlideShare a Scribd company logo
1 of 26
とある技術の快 速 聊 天light chat 若葉堂本舗技術開発部
そもそもlightChatって何?
2005年より提供しているWebチャット 誰でもすぐに参加できる 直近ログのログは常に表示 ,[object Object]
RSが動作する環境なら必ず使える
≒WindowsPCWebブラウザだけで利用可能 専用クライアントやプラグインがいらない
なんでlightChatを作ったの?
簡単に使えるチャットが欲しかったから IRC 利用に対してのハードルが高い ログイン名必須 通常は過去ログを参照できない ≒飛び込みで参加しにくい クライアントの導入が必須 通常のWebチャット リアルタイム性が皆無 Adobe FLASHでのチャット FLASH plug-inが必要
なんでブラウザだけで出来るの?
ブラウザ(≒HTML)だけでは実現できません 表示切替はページ全体の書き換えが必要 HTTPではPush配信をサポートしていない 1回ページを返すとそこで通信終了 サーバ側の情報更新を伝えることができない そもそもHTTPはステートレス 通信の間をまたいだ状態を持たない 常に新しい接続
じゃぁ、なんで出来てるの?
サーバ側の工夫とJavaScriptでカバー 表示切替 JavaScriptを使ってパーツだけ差し替え Push配信 疑似サーバPushでカバー 通信を繋ぎっぱなしにする サーバ側で更新があったらページを返す 1回ページを返すとそこで通信終了 ページが帰ってきたら再度繋ぎなおす ステートレス 通信の間をまたいだ状態を持たない クライアント側で状態を持つ
もうちょっと詳しい解説
通信モデルの違い
一般的なWebチャット
通信モデル:一般的なチャット(起動直後) ブラウザ Server PHP DataBase lightChatページ要求 ログ 取得 ログ 返却 lightChatページHTML返却
通信モデル:一般的なチャット(待機) ブラウザ Server PHP DataBase lightChatページ要求 ログ 取得 ログ 返却 lightChatページHTML返却 ブラウザ側で 5秒経過したら 再読み込み lightChatページ要求 ログ 取得 ログ 返却 lightChatページHTML返却
通信モデル:一般的なチャット(書き込み) ブラウザ Server PHP DataBase lightChatページ要求 ログ 取得 ログ 返却 lightChatページHTML返却 lightChat書き込み ログ 書込 ログ 取得 lightChatページHTML返却 ログ 返却
通信モデル:一般的なチャット(更新取得) ブラウザ Server PHP DataBase lightChatページ要求 ログ 取得 ログ 返却 lightChatページHTML返却 ブラウザ側で 5秒経過したら 再読み込み lightChatページ要求 ログ 取得 このタイミングでたまたま 誰かが書き込んでいたら 更新として取得される ログ 返却 lightChatページHTML返却
lightChat
通信モデル:lightChat(起動直後) ブラウザ JavaScript Server PHP DataBase Touch file lightChatページ要求 lightChatページHTML返却 コメットエンジン 起動 チャットログ要求 ログ 取得 チャットログ返却 ログ 返却 ブラウザ上の 表示を書き換え
通信モデル:lightChat(待機) ブラウザ JavaScript Server PHP DataBase Touch file チャットログ要求 更新監視 タイムアウトは25秒 監視中に更新が 無かった場合 チャットログ返却(0件) チャットログ要求 ~~以降繰り返し~~
通信モデル:lightChat(書き込み) ブラウザ JavaScript Server PHP DataBase Touch file 書き込み 書き込み要求 書き 込み 書き込み 内容消去 最終更新ミリ秒 書き込み 書き込み完了通知
通信モデル:lightChat(更新取得) ブラウザ JavaScript Server PHP DataBase Touch file チャットログ要求 更新監視 誰かが 書き込んだ! 更新検知 ログ 取得 チャットログ返却 ログ 返却 ブラウザ上の 表示を書き換え (差分箇所のみ) チャットログ要求 ~~以降繰り返し~~
通信モデルの相違点 更新検知 旧:実質検知は行っていない 新:サーバ側でデータが更新されたか監視 データ更新 旧:書換時に更新分が含まれていた場合のみ 新:サーバで更新があった瞬間
技術的にもうちょっと詳しく
通信 一般的にLong pollingと言われる事をしている サーバ側の工夫とJavaScriptでカバー 表示切替 JavaScriptを使ってパーツだけ差し替え Push配信 疑似サーバPushでカバー 通信を繋ぎっぱなしにする サーバ側で更新があったらページを返す 1回ページを返すとそこで通信終了 ページが帰ってきたら再度繋ぎなおす ステートレス 通信の間をまたいだ状態を持たない クライアント側で状態を持つ

More Related Content

What's hot

php-buildがいかに便利かを力説する
php-buildがいかに便利かを力説するphp-buildがいかに便利かを力説する
php-buildがいかに便利かを力説するYoshio Hanawa
 
PHPから離れて感じるPHPの良さ
PHPから離れて感じるPHPの良さPHPから離れて感じるPHPの良さ
PHPから離れて感じるPHPの良さShinichi Takahashi
 
Chrome-eject がこの先生きのこるには
Chrome-eject がこの先生きのこるにはChrome-eject がこの先生きのこるには
Chrome-eject がこの先生きのこるにはYosuke HASEGAWA
 
たのしい独自フレームワーク
たのしい独自フレームワークたのしい独自フレームワーク
たのしい独自フレームワークKenta USAMI
 
C# で Single Page Web アプリが開発できるフレームワーク&開発環境 「Blazor」 ― その概要と Web アプリ開発者にもたらす利点
C# で Single Page Web アプリが開発できるフレームワーク&開発環境 「Blazor」 ― その概要と Web アプリ開発者にもたらす利点C# で Single Page Web アプリが開発できるフレームワーク&開発環境 「Blazor」 ― その概要と Web アプリ開発者にもたらす利点
C# で Single Page Web アプリが開発できるフレームワーク&開発環境 「Blazor」 ― その概要と Web アプリ開発者にもたらす利点Jun-ichi Sakamoto
 
PHPerに覚えて欲しい日本語の重要性
PHPerに覚えて欲しい日本語の重要性PHPerに覚えて欲しい日本語の重要性
PHPerに覚えて欲しい日本語の重要性Rina Fukuda
 
C# で Single Page Web アプリを 開発できる Blazor ― その魅力
C# で Single Page Web アプリを開発できる Blazor ― その魅力C# で Single Page Web アプリを開発できる Blazor ― その魅力
C# で Single Page Web アプリを 開発できる Blazor ― その魅力Jun-ichi Sakamoto
 
LaravelとMVCの先へ
LaravelとMVCの先へLaravelとMVCの先へ
LaravelとMVCの先へYuuki Takezawa
 
Phpでアプリケーションサーバー
PhpでアプリケーションサーバーPhpでアプリケーションサーバー
Phpでアプリケーションサーバーk-motoyan
 
がんばらなくても C# で Single Page Web アプリケーションが書けてしまう「Blazor」とは
がんばらなくても C# で Single Page Web アプリケーションが書けてしまう「Blazor」とはがんばらなくても C# で Single Page Web アプリケーションが書けてしまう「Blazor」とは
がんばらなくても C# で Single Page Web アプリケーションが書けてしまう「Blazor」とはJun-ichi Sakamoto
 
Blazor 触ってみた
Blazor 触ってみたBlazor 触ってみた
Blazor 触ってみたOda Shinsuke
 
第21回関西PHP勉強会 ReactPHPは もっと流行って欲しい #phpkansai
第21回関西PHP勉強会 ReactPHPは もっと流行って欲しい #phpkansai第21回関西PHP勉強会 ReactPHPは もっと流行って欲しい #phpkansai
第21回関西PHP勉強会 ReactPHPは もっと流行って欲しい #phpkansaiHisateru Tanaka
 
今日から始めるLaravel
今日から始めるLaravel今日から始めるLaravel
今日から始めるLaravelMasaru Matsuo
 
PHP7の拡張モジュール事情
PHP7の拡張モジュール事情PHP7の拡張モジュール事情
PHP7の拡張モジュール事情Yoshio Hanawa
 
Mysqlを4.0から5.0を経由して5.6へバージョンアップした話
Mysqlを4.0から5.0を経由して5.6へバージョンアップした話Mysqlを4.0から5.0を経由して5.6へバージョンアップした話
Mysqlを4.0から5.0を経由して5.6へバージョンアップした話Masataka Kono
 
HTML5でできるカメラアプリを実際に体験しよう
HTML5でできるカメラアプリを実際に体験しよう HTML5でできるカメラアプリを実際に体験しよう
HTML5でできるカメラアプリを実際に体験しよう Hideki Akiba
 
Laravel 5.1 LTSでサービスを作る
Laravel 5.1 LTSでサービスを作るLaravel 5.1 LTSでサービスを作る
Laravel 5.1 LTSでサービスを作るinfinite_loop
 
zval をダイエットしてみた
zval をダイエットしてみたzval をダイエットしてみた
zval をダイエットしてみたYoshio Hanawa
 

What's hot (20)

php-buildがいかに便利かを力説する
php-buildがいかに便利かを力説するphp-buildがいかに便利かを力説する
php-buildがいかに便利かを力説する
 
PHPから離れて感じるPHPの良さ
PHPから離れて感じるPHPの良さPHPから離れて感じるPHPの良さ
PHPから離れて感じるPHPの良さ
 
Chrome-eject がこの先生きのこるには
Chrome-eject がこの先生きのこるにはChrome-eject がこの先生きのこるには
Chrome-eject がこの先生きのこるには
 
たのしい独自フレームワーク
たのしい独自フレームワークたのしい独自フレームワーク
たのしい独自フレームワーク
 
C# で Single Page Web アプリが開発できるフレームワーク&開発環境 「Blazor」 ― その概要と Web アプリ開発者にもたらす利点
C# で Single Page Web アプリが開発できるフレームワーク&開発環境 「Blazor」 ― その概要と Web アプリ開発者にもたらす利点C# で Single Page Web アプリが開発できるフレームワーク&開発環境 「Blazor」 ― その概要と Web アプリ開発者にもたらす利点
C# で Single Page Web アプリが開発できるフレームワーク&開発環境 「Blazor」 ― その概要と Web アプリ開発者にもたらす利点
 
PHPNGの動向
PHPNGの動向PHPNGの動向
PHPNGの動向
 
PHPerに覚えて欲しい日本語の重要性
PHPerに覚えて欲しい日本語の重要性PHPerに覚えて欲しい日本語の重要性
PHPerに覚えて欲しい日本語の重要性
 
C# で Single Page Web アプリを 開発できる Blazor ― その魅力
C# で Single Page Web アプリを開発できる Blazor ― その魅力C# で Single Page Web アプリを開発できる Blazor ― その魅力
C# で Single Page Web アプリを 開発できる Blazor ― その魅力
 
LaravelとMVCの先へ
LaravelとMVCの先へLaravelとMVCの先へ
LaravelとMVCの先へ
 
Phpでアプリケーションサーバー
PhpでアプリケーションサーバーPhpでアプリケーションサーバー
Phpでアプリケーションサーバー
 
がんばらなくても C# で Single Page Web アプリケーションが書けてしまう「Blazor」とは
がんばらなくても C# で Single Page Web アプリケーションが書けてしまう「Blazor」とはがんばらなくても C# で Single Page Web アプリケーションが書けてしまう「Blazor」とは
がんばらなくても C# で Single Page Web アプリケーションが書けてしまう「Blazor」とは
 
Blazor 触ってみた
Blazor 触ってみたBlazor 触ってみた
Blazor 触ってみた
 
第21回関西PHP勉強会 ReactPHPは もっと流行って欲しい #phpkansai
第21回関西PHP勉強会 ReactPHPは もっと流行って欲しい #phpkansai第21回関西PHP勉強会 ReactPHPは もっと流行って欲しい #phpkansai
第21回関西PHP勉強会 ReactPHPは もっと流行って欲しい #phpkansai
 
今日から始めるLaravel
今日から始めるLaravel今日から始めるLaravel
今日から始めるLaravel
 
PHP7の拡張モジュール事情
PHP7の拡張モジュール事情PHP7の拡張モジュール事情
PHP7の拡張モジュール事情
 
Mysqlを4.0から5.0を経由して5.6へバージョンアップした話
Mysqlを4.0から5.0を経由して5.6へバージョンアップした話Mysqlを4.0から5.0を経由して5.6へバージョンアップした話
Mysqlを4.0から5.0を経由して5.6へバージョンアップした話
 
HTML5でできるカメラアプリを実際に体験しよう
HTML5でできるカメラアプリを実際に体験しよう HTML5でできるカメラアプリを実際に体験しよう
HTML5でできるカメラアプリを実際に体験しよう
 
Laravel 5.1 LTSでサービスを作る
Laravel 5.1 LTSでサービスを作るLaravel 5.1 LTSでサービスを作る
Laravel 5.1 LTSでサービスを作る
 
zval をダイエットしてみた
zval をダイエットしてみたzval をダイエットしてみた
zval をダイエットしてみた
 
Javaに這いよる.NET
Javaに這いよる.NETJavaに這いよる.NET
Javaに這いよる.NET
 

Similar to とある技術の快速聊天

WebRTCについてざっと
WebRTCについてざっとWebRTCについてざっと
WebRTCについてざっとFumiyasu Sumiya
 
Webページが表示されるまで
Webページが表示されるまでWebページが表示されるまで
Webページが表示されるまでMasataka Suzuki
 
Web API のすすめ
Web API のすすめWeb API のすすめ
Web API のすすめYuji Shimada
 
2010-10-2 FxUG 名古屋勉強会 HTML5で遊んでみよう
2010-10-2 FxUG 名古屋勉強会 HTML5で遊んでみよう2010-10-2 FxUG 名古屋勉強会 HTML5で遊んでみよう
2010-10-2 FxUG 名古屋勉強会 HTML5で遊んでみようMori Shingo
 
Riotでサーバレスにした話
Riotでサーバレスにした話Riotでサーバレスにした話
Riotでサーバレスにした話Hiroyuki Hara
 
Nawa tech 20150321_lt
Nawa tech 20150321_ltNawa tech 20150321_lt
Nawa tech 20150321_ltTomoyuki Obi
 
公開型CMSとしてのTrac
公開型CMSとしてのTrac公開型CMSとしてのTrac
公開型CMSとしてのTracKazuya Hirobe
 
DartPad+CodePenで、Flutterを体験してみよう
DartPad+CodePenで、Flutterを体験してみようDartPad+CodePenで、Flutterを体験してみよう
DartPad+CodePenで、Flutterを体験してみようcch-robo
 
DockerHubを活用してAnsibleのPlaybookを自動ビルドする
DockerHubを活用してAnsibleのPlaybookを自動ビルドするDockerHubを活用してAnsibleのPlaybookを自動ビルドする
DockerHubを活用してAnsibleのPlaybookを自動ビルドするKoji Shiraishi
 
Tizen web app について調べたよ
Tizen web app について調べたよTizen web app について調べたよ
Tizen web app について調べたよNaruto TAKAHASHI
 
Bot Framework Composer Fukuazu
Bot Framework Composer FukuazuBot Framework Composer Fukuazu
Bot Framework Composer Fukuazuru pic
 
5分で分るWebRTCコーデックウォーズ
5分で分るWebRTCコーデックウォーズ5分で分るWebRTCコーデックウォーズ
5分で分るWebRTCコーデックウォーズYusuke Naka
 
最新Webプロトコル傾向と対策
最新Webプロトコル傾向と対策最新Webプロトコル傾向と対策
最新Webプロトコル傾向と対策Kensaku Komatsu
 
Web Speech API で2時間で作れる?ブラウザロボット
Web Speech API で2時間で作れる?ブラウザロボットWeb Speech API で2時間で作れる?ブラウザロボット
Web Speech API で2時間で作れる?ブラウザロボットHirokazu Egashira
 
俺 と ご褒美 Bot
俺 と ご褒美 Bot俺 と ご褒美 Bot
俺 と ご褒美 BotMasayuki KaToH
 
20151114 _html5無料セミナー(OSC2015徳島)
20151114 _html5無料セミナー(OSC2015徳島)20151114 _html5無料セミナー(OSC2015徳島)
20151114 _html5無料セミナー(OSC2015徳島)Takahiro Kujirai
 
PHP と Sencha Ext.Direct
PHP と Sencha Ext.DirectPHP と Sencha Ext.Direct
PHP と Sencha Ext.Direct久司 中村
 
nalgo-botができるまで
nalgo-botができるまでnalgo-botができるまで
nalgo-botができるまでTomoakiNakashima
 
管理画面のアクセスコントロール
管理画面のアクセスコントロール 管理画面のアクセスコントロール
管理画面のアクセスコントロール Masao Maeda
 
チラ見せ♡ナイト@20150410 LT公開用
チラ見せ♡ナイト@20150410 LT公開用チラ見せ♡ナイト@20150410 LT公開用
チラ見せ♡ナイト@20150410 LT公開用Keisuke Utsumi
 

Similar to とある技術の快速聊天 (20)

WebRTCについてざっと
WebRTCについてざっとWebRTCについてざっと
WebRTCについてざっと
 
Webページが表示されるまで
Webページが表示されるまでWebページが表示されるまで
Webページが表示されるまで
 
Web API のすすめ
Web API のすすめWeb API のすすめ
Web API のすすめ
 
2010-10-2 FxUG 名古屋勉強会 HTML5で遊んでみよう
2010-10-2 FxUG 名古屋勉強会 HTML5で遊んでみよう2010-10-2 FxUG 名古屋勉強会 HTML5で遊んでみよう
2010-10-2 FxUG 名古屋勉強会 HTML5で遊んでみよう
 
Riotでサーバレスにした話
Riotでサーバレスにした話Riotでサーバレスにした話
Riotでサーバレスにした話
 
Nawa tech 20150321_lt
Nawa tech 20150321_ltNawa tech 20150321_lt
Nawa tech 20150321_lt
 
公開型CMSとしてのTrac
公開型CMSとしてのTrac公開型CMSとしてのTrac
公開型CMSとしてのTrac
 
DartPad+CodePenで、Flutterを体験してみよう
DartPad+CodePenで、Flutterを体験してみようDartPad+CodePenで、Flutterを体験してみよう
DartPad+CodePenで、Flutterを体験してみよう
 
DockerHubを活用してAnsibleのPlaybookを自動ビルドする
DockerHubを活用してAnsibleのPlaybookを自動ビルドするDockerHubを活用してAnsibleのPlaybookを自動ビルドする
DockerHubを活用してAnsibleのPlaybookを自動ビルドする
 
Tizen web app について調べたよ
Tizen web app について調べたよTizen web app について調べたよ
Tizen web app について調べたよ
 
Bot Framework Composer Fukuazu
Bot Framework Composer FukuazuBot Framework Composer Fukuazu
Bot Framework Composer Fukuazu
 
5分で分るWebRTCコーデックウォーズ
5分で分るWebRTCコーデックウォーズ5分で分るWebRTCコーデックウォーズ
5分で分るWebRTCコーデックウォーズ
 
最新Webプロトコル傾向と対策
最新Webプロトコル傾向と対策最新Webプロトコル傾向と対策
最新Webプロトコル傾向と対策
 
Web Speech API で2時間で作れる?ブラウザロボット
Web Speech API で2時間で作れる?ブラウザロボットWeb Speech API で2時間で作れる?ブラウザロボット
Web Speech API で2時間で作れる?ブラウザロボット
 
俺 と ご褒美 Bot
俺 と ご褒美 Bot俺 と ご褒美 Bot
俺 と ご褒美 Bot
 
20151114 _html5無料セミナー(OSC2015徳島)
20151114 _html5無料セミナー(OSC2015徳島)20151114 _html5無料セミナー(OSC2015徳島)
20151114 _html5無料セミナー(OSC2015徳島)
 
PHP と Sencha Ext.Direct
PHP と Sencha Ext.DirectPHP と Sencha Ext.Direct
PHP と Sencha Ext.Direct
 
nalgo-botができるまで
nalgo-botができるまでnalgo-botができるまで
nalgo-botができるまで
 
管理画面のアクセスコントロール
管理画面のアクセスコントロール 管理画面のアクセスコントロール
管理画面のアクセスコントロール
 
チラ見せ♡ナイト@20150410 LT公開用
チラ見せ♡ナイト@20150410 LT公開用チラ見せ♡ナイト@20150410 LT公開用
チラ見せ♡ナイト@20150410 LT公開用
 

とある技術の快速聊天