Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Server-sent eventsを使ってみた / I tried using Server...
Search
Endo_Hizumi
September 04, 2019
Technology
1
1.3k
Server-sent eventsを使ってみた / I tried using Server-sent event
Endo_Hizumi
September 04, 2019
Tweet
Share
More Decks by Endo_Hizumi
See All by Endo_Hizumi
JSでギャルゲー!~JavaScriptでノベルゲーエンジン作ったった~
endohizumi
1
60
意志の力が9割。アニメから学ぶAI時代のこれから。
endohizumi
1
130
JSでギャルゲーをつくろう!(第3版)
endohizumi
0
74
JSでギャルゲーをつくろう!(第2版)
endohizumi
0
76
JSでギャルゲーをつくろう!
endohizumi
0
390
テレビを飲み込め! Webの嵐!! / Swallow the TV! Web storm! !!
endohizumi
1
100
OK:Googleから始めるスマートホーム生活 / OK: Smart home life starting from Google
endohizumi
0
320
クソアプリで基礎固め / Tutorial in your joke app for Vue.js
endohizumi
0
230
jQuery使いがVue.jsを使った話 / thank you jQuery,Hello Vue.js
endohizumi
0
190
Other Decks in Technology
See All in Technology
生成AI活用の型ハンズオン〜顧客課題起点で設計する7つのステップ
yushin_n
0
260
Connection-based OAuthから学ぶOAuth for AI Agents
flatt_security
0
160
AI駆動開発における設計思想 認知負荷を下げるフロントエンドアーキテクチャ/ 20251211 Teppei Hanai
shift_evolve
PRO
2
440
AgentCore BrowserとClaude Codeスキルを活用した 『初手AI』を実現する業務自動化AIエージェント基盤
ruzia
4
240
AWSに革命を起こすかもしれない新サービス・アップデートについてのお話
yama3133
0
310
プロンプトやエージェントを自動的に作る方法
shibuiwilliam
15
15k
業務のトイルをバスターせよ 〜AI時代の生存戦略〜
staka121
PRO
2
230
【U/Day Tokyo 2025】Cygames流 最新スマートフォンゲームの技術設計 〜『Shadowverse: Worlds Beyond』におけるアーキテクチャ再設計の挑戦~
cygames
PRO
2
950
ExpoのインダストリーブースでみたAWSが見せる製造業の未来
hamadakoji
0
180
打 造 A I 驅 動 的 G i t H u b ⾃ 動 化 ⼯ 作 流 程
appleboy
0
370
Fashion×AI「似合う」を届けるためのWEARのAI戦略
zozotech
PRO
2
1k
ハッカソンから社内プロダクトへ AIエージェント「ko☆shi」開発で学んだ4つの重要要素
sonoda_mj
6
930
Featured
See All Featured
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
231
22k
Future Trends and Review - Lecture 12 - Web Technologies (1019888BNR)
signer
PRO
0
3.1k
The untapped power of vector embeddings
frankvandijk
1
1.5k
Raft: Consensus for Rubyists
vanstee
141
7.2k
How GitHub (no longer) Works
holman
316
140k
The #1 spot is gone: here's how to win anyway
tamaranovitovic
1
860
Discover your Explorer Soul
emna__ayadi
2
1k
Collaborative Software Design: How to facilitate domain modelling decisions
baasie
0
94
How to build a perfect <img>
jonoalderson
0
4.6k
Tips & Tricks on How to Get Your First Job In Tech
honzajavorek
0
390
The Illustrated Children's Guide to Kubernetes
chrisshort
51
51k
Bioeconomy Workshop: Dr. Julius Ecuru, Opportunities for a Bioeconomy in West Africa
akademiya2063
PRO
0
26
Transcript
Server-sent eventsを 使ってみた 2019年9月4日(水)残暑に負けるな!自由研究 LT大会 遠藤ヒズミ 1
2 こんばんは、遠藤ヒズミと言います。
3 都内で、SESのWebエンジニアしてます
4 今日は、紹介も兼ねて Server-sent eventsを使った 感想を話します。
5 なぜ、Server-sent eventsなの? GameClient GameServer Jinro JinroResponcer.php Broadcast.php member activity_logs
triggerで 書き込む 発言・投票などの行動 書き込み レコード 取得 JSONで送信 5 今、開発している人狼のWebアプリの仕組みがこうなって います。
6 なぜ、Server-sent eventsなの? GameClient GameServer Jinro JinroResponcer.php broadcast.php member activity_logs
triggerで 書き込む 発言・投票などの行動 書き込み レコード 取得 JSONで送信 6 プレイヤーの行動をサーバーに送るには、何も考えず に、HTTPリクエストを送れば良い。
7 なぜ、Server-sent eventsなの? GameClient GameServer Jinro JinroResponcer.php Broadcast.php member activity_logs
triggerで 書き込む 発言・投票などの行動 書き込み レコード 取得 JSONで送信 7 では、サーバーに届いたプレイヤーの行動を どうやって、他のプレイヤーに伝えたらよいのか?
なぜ、Server-sent eventsなの? サーバーから情報を取得する方法 • ポーリング • comet • WebSocket •
Server-sent events 8
なぜ、Server-sent eventsなの? ポーリング・Comet →あるかわからない情報のために、周期的にリクエスト送るのは、面倒・ ムダが多い・しんどい →できれば、能動的にサーバーから送ってほしい 9
なぜ、Server-sent eventsなの? 選ばれたのは、綾鷹Server-sent eventsでした。 • 従来の延長でとっつきやすい・理解しやすい • サーバー・クライアント共に容易に実装できる • 切断時に再接続を行ってくれる
• HTTP通信なので、HTTPレスポンスコードで制御できる • 独自にイベントを定義できる。 10
なぜ、Server-sent eventsなの? 選ばれたのは、綾鷹Server-sent eventsでした。 • 従来の延長でとっつきやすい・理解しやすい • サーバー・クライアント共に容易に実装できる • 切断時に再接続を行ってくれる
• HTTP通信なので、HTTPレスポンスコードで制御できる • 独自にイベントを定義できる。 → 簡単でとっつきやすかった 11
なぜ、Server-sent eventsなの? 選ばれたのは、綾鷹Server-sent eventsでした。 → 送信側はAjaxで実装済みなので、WebSocketで再実装はやる気が 起きなかった(一番の理由) 別に独自プロトコルにひよったわけじゃねーし 12
Server-sent eventsとは クライアントからのリクエスト無しに、サーバーからデータを送信できる HTML5のAPIの1つです。 13
Server-sent eventsとは クライアントと張ったコネクションにchunkedデータを送信することで、コ ネクションを終了させずに、サーバーを始点としたデータを送信を実現し ています。 Client Http Server 接続要求 14
Server-sent eventsとは クライアントと張ったコネクションにchunkedデータを送信することで、コ ネクションを終了させずに、サーバーを始点としたデータを送信を実現し ています。 Client Http Server chunked 15
Server-sent eventsとは クライアントと張ったコネクションにchunkedデータを送信することで、コ ネクションを終了させずに、サーバーを始点としたデータを送信を実現し ています。 Client Http Server chunked chunked
16
Server-sent eventsとは クライアントと張ったコネクションにchunkedデータを送信することで、コ ネクションを終了させずに、サーバーを始点としたデータを送信を実現し ています。 Client Http Server chunked chunked
chunked 17
Server-sent eventsとは クライアントと張ったコネクションにchunkedデータを送信することで、コ ネクションを終了させずに、サーバーを始点としたデータを送信を実現し ています。 Client Http Server chunked chunked
chunked chunked 18
従来技術と比較 19 リクエストの 有無 レスポンスの 種類 送信後の コネクション 返答 タイミング
ポーリング 毎回必要 通常のHTTP レスポンス 終了 可及的速や かに comet (ロング ポーリング) 毎回必要 通常のHTTP レスポンス 終了 更新まで 保留可 Server-sent events 初回のみ chunked 継続 更新まで 保留可
利用局面と活用事例 利用局面 • チャットアプリで、メッセージの送信 • センサーデータをリアルタイム表示するWebアプリ • 並列でのWebAPIの呼び出し • その他、非同期でサーバーからデータを受信する処理
活用事例 • GREEチャット(2014年6月時点) • 某電気通信事業者のトイレの空室確認システム 20
21 容易に実装できる
22 どれだけ簡単なのかというと・・・
EventSourceコンストラクタの引数に通信先を渡す 23
onmessageのコールバックに受信後の処理を書く 24
ヘッダーにContent-Type: text/event-streamを記述 25
あとは、送信したい内容を書けばおk 26
27 簡単でしょ?
注意! データの末行を空行(\n)で区切らないと送信されない。 このことに気がつくまでが、2日くらいかかって、しんどかった。 あと、Internet ExplorerとEdgeでは、ひと手間かける必要がある。 28
まとめ • Server-Sent eventsは、コネクションを張りっぱなしにして、サー バーから能動的にデータを送れる技術 • 数行のコードでサーバー・クライアント共に容易に実装できる • センサーデータのリアルタイム表示など、テキストでの非同期での データ受け取りが得意
29
まとめ • Server-Sent eventsは、コネクションを張りっぱなしにして、サー バーから能動的にデータを送れる技術 • 数行のコードでサーバー・クライアント共に容易に実装できる • センサーデータのリアルタイム表示など、テキストでの非同期での データ受け取りが得意
30 終わり!聞いてくれてありがとう!