Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Server-sent eventsを使ってみた / I tried using Server...
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
Endo_Hizumi
September 04, 2019
Technology
1.3k
1
Share
Server-sent eventsを使ってみた / I tried using Server-sent event
Endo_Hizumi
September 04, 2019
More Decks by Endo_Hizumi
See All by Endo_Hizumi
欲しいを叶える個人開発の進め方 / How to Run an Indie Project That Brings Your Ideas to Life
endohizumi
0
790
JSでギャルゲー!~JavaScriptでノベルゲーエンジン作ったった~
endohizumi
1
380
意志の力が9割。アニメから学ぶAI時代のこれから。
endohizumi
1
170
JSでギャルゲーをつくろう!(第3版)
endohizumi
0
240
JSでギャルゲーをつくろう!(第2版)
endohizumi
0
91
JSでギャルゲーをつくろう!
endohizumi
0
460
テレビを飲み込め! Webの嵐!! / Swallow the TV! Web storm! !!
endohizumi
1
120
OK:Googleから始めるスマートホーム生活 / OK: Smart home life starting from Google
endohizumi
0
360
クソアプリで基礎固め / Tutorial in your joke app for Vue.js
endohizumi
0
260
Other Decks in Technology
See All in Technology
拝啓、あの夏の僕へ〜あなたも知っているApp Runnerの世界〜
news_it_enj
0
140
EMから幅を広げるために最近挑戦していること / Recent challenges I'm undertaking to expand my horizons beyond EM
hiro_torii
1
170
Claude Code を安全に使おう勉強会 / Claude Code Security Basics
masahirokawahara
12
39k
AI時代 に増える データ活用先
takahal
0
350
Oracle Cloud Infrastructure:2026年4月度サービス・アップデート
oracle4engineer
PRO
0
230
Cortex Codeのコスト見積ヒントご紹介
yokatsuki
0
130
AIはハッカーを減らすのか、増やすのか?──現役ホワイトハッカーから見るAI時代のリアル【MEGU-Meet】
cscengineer
PRO
0
240
Scovilleモバイルエンジニア募集中.pdf
julienrudin
0
140
Digital Independence: Why, When and How
wannesrams
0
210
AIが盛んな時代に 技術記事を書き始めて起きた私の中での小さな変化
peintangos
0
340
フロントエンドの相手が変わった - AIが加わったWebの新しいインターフェース設計
azukiazusa1
18
4.2k
生成AIが変える SaaS の競争原理と弁護士ドットコムのプロダクト戦略
bengo4com
1
3.1k
Featured
See All Featured
Building a Scalable Design System with Sketch
lauravandoore
463
34k
BBQ
matthewcrist
89
10k
The Invisible Side of Design
smashingmag
303
52k
The Impact of AI in SEO - AI Overviews June 2024 Edition
aleyda
5
820
Highjacked: Video Game Concept Design
rkendrick25
PRO
1
350
Leadership Guide Workshop - DevTernity 2021
reverentgeek
1
270
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
1
2k
Embracing the Ebb and Flow
colly
88
5k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
2.8k
30 Presentation Tips
portentint
PRO
1
280
Test your architecture with Archunit
thirion
1
2.2k
Mind Mapping
helmedeiros
PRO
1
170
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 終わり!聞いてくれてありがとう!