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
ポコロンダンジョンズとリアルタイム通信 -サーバサイド編-
Search
CyberAgent SGE Engineer
May 20, 2016
Programming
0
2.7k
ポコロンダンジョンズとリアルタイム通信 -サーバサイド編-
Node.js、Socket.IOを利用したリアルタイム通信の開発と運用
https://atnd.org/events/76070
の発表資料です
CyberAgent SGE Engineer
May 20, 2016
Tweet
Share
More Decks by CyberAgent SGE Engineer
See All by CyberAgent SGE Engineer
SREチームの立ち上げから5年間とこれから
sgeengineer
0
1.9k
サムザップにおけるNotionの 活用事例とPHPでのNotionAPIを利用した仕組み構築の紹介
sgeengineer
0
2.2k
Laravel OctaneをどうしてもPharで運用したい話
sgeengineer
2
2.7k
大規模Unityゲーム開発の設計事例 〜ドメイン駆動設計とDIコンテナを導入した一年を振り返る〜 / cedec2021-ddd
sgeengineer
2
15k
ロボットを動かすビジュアルプログラミングでできることはPHPでもできる!
sgeengineer
0
1.9k
PHP8版!Swooleのフレームワークを比べてみた
sgeengineer
1
2.9k
「戦国炎舞 -KIZNA-」で行ったAWSのコスト最適化の話
sgeengineer
0
2k
AirtestとPocoとOpenSTFによるUnity製スマートフォン向けゲームの実機自動テスト環境構築とその利用方法
sgeengineer
0
5.3k
PHPでgRPCって どこまでいけるの?
sgeengineer
0
5.1k
Other Decks in Programming
See All in Programming
AI駆動開発カンファレンスAutumn2025 _AI駆動開発にはAI駆動品質保証
autifyhq
0
120
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
270
KoogではじめるAIエージェント開発
hiroaki404
1
310
EMこそClaude Codeでコード調査しよう
shibayu36
0
600
SwiftDataを使って10万件のデータを読み書きする
akidon0000
0
250
Kotlin 2.2が切り拓く: コンテキストパラメータで書く関数型DSLと新しい依存管理のかたち
knih
0
310
Vue 3.6 時代のリアクティビティ最前線 〜Vapor/alien-signals の実践とパフォーマンス最適化〜
hiranuma
2
380
チームのテスト力を総合的に鍛えてシフトレフトを推進する/Shifting Left with Software Testing Improvements
goyoki
4
1.7k
퇴근 후 1억이 거래되는 서비스 만들기 | 내가 AI를 사용하는 방법
maryang
2
440
詳細の決定を遅らせつつ実装を早くする
shimabox
1
620
例外処理を理解して、設計段階からエラーを見つけやすく、起こりにくく #phpconfuk
kajitack
8
3.3k
ビルドプロセスをデバッグしよう!
yt8492
0
250
Featured
See All Featured
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.3k
Faster Mobile Websites
deanohume
310
31k
The Pragmatic Product Professional
lauravandoore
36
7k
How STYLIGHT went responsive
nonsquared
100
5.9k
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.5k
It's Worth the Effort
3n
187
28k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
22k
The World Runs on Bad Software
bkeepers
PRO
72
11k
Product Roadmaps are Hard
iamctodd
PRO
55
11k
Code Reviewing Like a Champion
maltzj
526
40k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
1.7k
Building Applications with DynamoDB
mza
96
6.7k
Transcript
גࣜձࣾάϨϯδ ௩ݪ༟ ϙίϩϯμϯδϣϯζͱ ϦΞϧλΠϜ௨৴ αʔόαΠυฤ
‣໊લ ௩ݪ༟ ‣ॴଐ גࣜձࣾάϨϯδ ‣ܦྺ ɹɾ4*ͷϕϯνϟʔاۀʹೖࣾ ɹɾ$ZCFS9ೖࣾ ɹɹΞΠυϧϨϘϦϡʔγϣϯ ɹɹϝδϟʔϦʔάΦʔϧελʔζ ɹɹ/#",Φʔϧελʔζ
ɹɹαΧͭ͘4ϫʔϧυελʔζ ɹɾάϨϯδҟಈ ɹɹϙίϩϯμϯδϣϯζ ࣗݾհ
ΞδΣϯμ ‣ϙίμϯ֓ཁ ‣ར༻ٕज़ ‣αʔόߏ ‣σʔλ ‣ػೳ ‣ൃੜͨ͠ͱରԠ
ϙίμϯ֓ཁ
ϙίμϯ֓ཁ ‣ϦϦʔε J04ɿ݄ "OESPJEɿ݄ ‣࠷৽όʔδϣϯ ‣μϯϩʔυ ສ
‣ϚϧνϓϨΠಋೖ ݄ ։ൃظؒϲ݄Ґ ॳʹಋೖ༧ఆͩͬͨ ‣νʔϜਓ ਓऑ αʔόʔαΠυɿਓ ΫϥΠΞϯταΠυɿਓ ϙίμϯ֓ཁ
w/HJOY w1)1 w1IBMDPO w.BSJB%#
w3FEJT w.FNDBDIFE ར༻ٕज़ඇϦΞϧλΠϜ௨৴෦
w /HJOY w /PEFKT W w 4PDLFU*0
ΫϥΠΞϯτͷϥΠϒϥϦʹ߹ΘͤͯΛબɻ ଓ࣌ʹϋϯυγΣΠΫ͕Ԇͨ͠߹ʹҰఆظؒ ϋϯυγΣΠΫΛͭύονΛͯͯར༻͍ͯ͠Δɻ IUUQTHJUIVCDPNUJDPTPDLFUJPUSFFQBUDIFE w 3FEJT ར༻ٕज़ϦΞϧλΠϜ௨৴෦
‣ 4PDLFU*0ͱ w 8FCTPDLFUɺYISQPMJOHΛαϙʔτ ΫϥΠΞϯτͷڥ࣍ୈͰࣗಈతʹΓସ͑ w 8FCTPDLFU௨৴ΛߦͰ࢝ΊΒΕΔ w ଓཱ֬̎ஈ֊ํࣜ ϋϯυγΣΠΫ
ଓཁٻ ଓཱ֬ ར༻ٕज़ϦΞϧλΠϜ௨৴෦
‣ 3FEJTͷ1VC4VCͱ w QVCMJTI ൃߦ ɺTVCTDSJCF ߪಡ ͷུ w Πϕϯτ͕ൃߦ͞ΕΔͱɺߪಡऀ௨͞ΕΔ
‣ ϚϧνϓϨΠͰͷར༻໘ w σʔλߋ৽௨ w ϓϨΠใͷಉظ ར༻ٕज़ϦΞϧλΠϜ௨৴෦
ɾɾɾ ϩʔυόϥϯα ɾɾɾ σʔλ༻ QVCTVC༻ ϩʔυόϥϯα XFCTPDLFU IUUQT αʔόߏશମ
w #*(*1 w 44-ରԠ w ϥϯυϩϏϯʴ*1QFSTJTUFODFઃఆ ಉ͡*1ΞυϨεɺಉ͡OPEFαʔό QFSTJTUFODFͷΩϟογϡআִؒΛඵఔ
ϚεΫ ࠷ۙ·ͰʹͳͬͯͯภΓ͕ɾɾɾ w TUJDLZTFTTJPOΛར༻ 4PDLFU*0ͷίωΫγϣϯཱ֬௨৴ʢൃʣΛಉ αʔόʹৼΔͨΊ αʔόߏϩʔυόϥϯα
ϩʔυόϥϯα ᶄ ᶃ ಉ͡*1ಉ͡αʔόৼΕΔ͕ɺ4PDLFU*0Ͱ͕ɾɾɾ ‣ persistence͋Γͷ߹ αʔόߏϩʔυόϥϯα
‣ αϒωοτϚεΫ • 255.0.0.0ͷ߹ ୈ̍ΦΫςοτͷΈͰৼΓ͚ 192.0.0.0ʙ192.255.255.255 IPΞυϨεɿ16777216 →ۉʹׂΓৼΒΕͳ͍ •
255.255.255.255ͷ߹ ୈ̐ΦΫςοτ·ͰৼΓ͚ IPΞυϨεɿ1 →ۉʹׂΓৼΒΕΔ αʔόߏϩʔυόϥϯα
ϩʔυόϥϯα ‣ sticky sessionͳ͠ͷ߹ ᶃIBOETIBLF ᶄDPOOFDU IBOETIBLFͱDPOOFDUͰҧ͏αʔόʔৼΒΕͯ͠·͏Մೳ ੑ͕͋ΓɺίωΫγϣϯཱ͕֬Ͱ͖ͳ͍ɻ ʢ.FNPSZ4UPSFར༻࣌ʣ αʔόߏϩʔυόϥϯα
ϩʔυόϥϯα ᶃIBOETIBLF ᶄDPOOFDU ᶅDPOOFDUFE IBOETIBLFͱDPOOFDU͕ಉ͡αʔόʔৼΒΕΔͨΊɺ ίωΫγϣϯཱ͕֬Ͱ͖Δɻ ʢ.FNPSZ4UPSFར༻࣌ʣ ‣ sticky session͋Γͷ߹
αʔόߏϩʔυόϥϯα
‣ /HJOY w ൪ϙʔτͰड͚ w ൪ϙʔτͰ/PEFKTʹྲྀ͠ࠐΉ w ϦόʔεϓϩΩγͰαϒυϝΠϯΛׂΓͯͨ /PEFKTʹৼΔ ‣
/PEFKT w ϚελʔϓϩηεɺϫʔΧϓϩηε ˞ϫʔΧϓϩηε͕$MVTUFSߏʹͰ͖ͳ͔ͬͨ w GPSFWFSΛར༻͠ϓϩηεӬଓԽ αʔόߏ8FCαʔό
server { listen 80; server_name localhost; index index.php index.html index.htm;
set_real_ip_from 10.0.0.0/8; real_ip_header X-Forwarded-For; underscores_in_headers on; location ^~ /pocolon_dungeons_node/ { proxy_pass http://127.0.0.1:3000/; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; } location ^~ /pocolon_dungeons_node/socket.io/ { … } } /etc/nginx/conf.d/pocolon_dungeons_node.conf αʔόߏ8FCαʔό
• pub/sub༻ͱσʔλ༻ͷ2छྨ • pub/sub༻ϧʔϜ୯ҐͰৼΓ͚ • σʔλ༻PHPଆ͔Βར༻͢Δ αʔόߏ3FEJTαʔό
σʔλ3FEJTͷΩʔ Ϛονϯάݕࡧ༻ ιʔτࡁΈηοτܕ ҐஔใɺϧʔϜ*%Λొ ϧʔϜใ༻ ϋογϡܕ ϧʔϜৄࡉใΛొ ɾμϯδϣϯใ
ɾεςʔλεཧ ϚονϯάதɺΫΤετத ɾҐஔใ ɾΞϓϦόʔδϣϯ ϝϯόʔใ༻ ϋογϡܕ σοΩใ උϞϯελʔ ͳͲΛొ
ϩοΫ༻ จࣈྻܕ ϧʔϜใɺϝϯόʔใͷΩʔΛߋ৽ ͢ΔࡍͷϩοΫʹར༻ɻ 4&5/9 &91*3& 4&5/9l4&5JG/PUF9JTUTz
Ωʔ͕ଘࡏͨ͠Βηοτग़དྷͳ͍ͷΛར ༻͠ɺΩʔͷηοτͱআͰϩοΫΛ࣮ ݱɻ σʔλ3FEJTͷΩʔ
ػೳॲཧͷྲྀΕ w ϧʔϜ࡞ࢀՃ 1)1㱺/PEFKTͷҰ࿈ͷॲཧ͕ྃͯ͠ɺ8FCTPDLFUͷίω Ϋγϣϯཱ͕֬ग़དྷͨΒॲཧྃɻ w ΫΤετ։࢝ 1)1ଆͰ%#ʹొޙɺ/PEFKTͰͪ߹ΘͤॲཧΛ͠ɺ ϚϧνϓϨΠ։࢝ɻ w
ΫΤετத جຊతʹ8FCTPDLFU௨৴͕ͩɺ%#ૢ࡞͕ඞཁͳ໘ 1)1ଆͰॲཧ͞ΕΔɻ ίϯςΟχϡʔ w ΫΤετऴྃ 8FCTPDLFUͷίωΫγϣϯഁغޙɺ1)1ଆͰ%#ߋ৽ ͕ߦΘΕΔɻ
wϚϧνϓϨΠҎ֎ͷػೳશͯ wϧʔϜ࡞ɺࢀՃ ˞XFCTPDLFUͷίωΫγϣϯཱ֬෦/PEFKT wϧʔϜݕࡧ wͦͷଞʢγϯάϧϓϨΠڞ௨෦ʣ ϓϨΠϠʔใऔಘɺυϩοϓநબɺ ϩάͳͲ%#ૢ࡞͕བྷΉॲཧ w3FEJTͷσʔλ/PEFKTଆͱڞ༗ ػೳඇϦΞϧλΠϜ௨৴෦
ػೳϦΞϧλΠϜ௨৴෦ wΫΤετ։࢝ޙͷ΄΅શͯͷॲཧ ίϯςΟχϡʔͳͲ%#ૢ࡞Λ͢Δࡍ1)1ͷ௨৴ߦ͍ͬͯΔ wίωΫγϣϯཱ֬ɺഁغ ίωΫγϣϯ࣌ͷϢχʔΫ*%Λ3FEJTʹొ͍ͯ͠Δ wΫϥΠΞϯτ͔ΒૹΒΕͨσʔλΛड͚ྲྀ͢ ήʔϜϩδοΫ࣋ͨͳ͍ɻ wಉظ ϑϩΞͪ߹Θͤɺ൫໘෮چɻ wιέοτஅ
Ұఆ࣌ؒԠͷͳ͍ϓϨΠϠʔΛஅɻ wιέοτ࠶ଓ
‣1)1ଆ wҐஔใɺ߹ݴ༿ͳͲΛड͚औΓ w3FEJTσʔλొ Ϛονϯάݕࡧ༻ɺϝϯόʔใ༻ͳͲΩʔΛ ෳʹ͚͍ͯΔɻ wσοΩใͳͲදࣔʹ͏σʔλΛฦ͢ ‣/PEFKTଆ wϢʔβ*%ɺϧʔϜ*%ͳͲΛड͚औΓ w3FEJTσʔλߋ৽ ϧʔϜใͷεςʔλεΛϚονϯάதʹɻ
ιέοτଓྃεςʔλεʹɻ wσοΩใͳͲදࣔʹ͏σʔλΛ௨ ػೳϧʔϜ࡞
‣1)1ଆ wҐஔใɺ߹ݴ༿ͳͲΛड͚औΓ w3FEJTσʔλऔಘ wߜΓࠐΈ݅ ಉҰΞϓϦόʔδϣϯ ػೳόάʹࠩҟ͕ੜ͡ɺ൫໘͕ζϨΔݪҼʹͳΔͨ Ίɻ Ґஔใ͕͍ۙϧʔϜ ্ݶʹͳΔ·ͰɺঃʑʹڑΛԆͯ͠ݕࡧΛ܁ Γฦ͢ʢڑͷ্ݶ͋Δʣ
wϧʔϜͷϦετٴͼදࣔ༻σʔλΛฦ͢ ػೳϧʔϜݕࡧ
‣ 1)1ଆ w ϧʔϜ*%ͳͲΛड͚औΓ w 3FEJTσʔλߋ৽ ϝϯόʔใʹࣗΛՃ ˞ιέοτະଓεςʔλε w ϧʔϜͷϢʔβͷσοΩใͳͲදࣔ༻σʔλ
Λฦ͢ ‣ /PEFKTଆ w Ϣʔβ*%ɺϧʔϜ*%ͳͲΛड͚औΓ w 3FEJTσʔλߋ৽ ιέοτଓࡁΈεςʔλεʹߋ৽ w ߋ৽ใͳͲදࣔʹ͏σʔλΛશϝϯόʔ௨ ػೳϧʔϜࢀՃ
ػೳಉظͪ߹Θͤ ‣ /PEFKTଆ ֤͔Β४උྃΠϕϯτΛൃߦ ࣗͷঢ়ଶΛ४උྃεςʔλεʹߋ৽ Ұఆ࣌ؒԠͷͳ͍Ϣʔβʔͷஅॲཧ શһ͕ἧ͏·ͰػΛશϝϯόʔ௨ શһ͕ἧͬͨΒಉظྃΛશϝϯόʔ௨
ػೳιέοτஅ ‣ /PEFKTଆ w ੜଘ֬ೝΠϕϯτ͕Ұఆ࣌ؒདྷͳ͍ϓϨΠ ϠʔͷιέοτΛஅ w 3FEJTσʔλߋ৽ ϗετ͕ͨ͠߹ղࢄPSݖݶҕৡ
ήετͷ߹ɺϗετʹݖݶҕৡ w அใΛશϝϯόʔʹ௨
‣ /PEFKTଆ Ұఆ࣌ؒͷ࠶ଓཁٻ࠶ϧʔϜʹඥ ͚͢͠ɻ w Ϣʔβ*%ɺϧʔϜ*%ͳͲΛड͚औΓ w 3FEJTσʔλߋ৽ ࣗͷίωΫγϣϯ*%Λॻ͖͑Δ w
ߋ৽ใͳͲදࣔʹ͏σʔλશϝϯόʔ ௨ ػೳιέοτ࠶ଓ
ػೳͦͷଞΠϕϯτ wੜଘ֬ೝ wͳͧΓ wΫΤετ։࢝௨ wϓϨΠϠʔλʔϯऴྃ wίϯςΟχϡʔ wϦλΠϠ wεΩϧ༻ wίϛϡχέʔγϣϯ
‣ϓϩηεΛ$MVTUFSߏʹͰ͖ͳ͍ ʲݪҼʳ 3FEJTपΓͷಠ࣮͕ࣗݪҼɻ .FNPSZ4UPSFΛར༻ͯ͠ηογϣϯཧΛ͍ͯͨͨ͠Ίɺ ผͷϓϩηεʹৼΒΕΔͱॲཧͰ͖ͳ͍ɻ ʲҰ࣍ରԠʳ αʔόʹ͖ͭϚελʔϓϩηεɺϫʔΧϓϩηεʹ͠ ͨɻ ίΞͩͬͨͨΊɺผϓϩηεͷӨڹΛड͚ɺ/PEFͷॲ ཧ͕٧·Δ͜ͱ͕͋ͬͨ
ʲ߃ٱରԠʳ ૉʹ3FEJT4UPSFΛར༻͢Εผͷαʔόϓϩηεʹৼ ΒΕͯͳ͘ηογϣϯҡ͕࣋Ͱ͖Δɻ ʢࠓिϦϦʔε͠·͢ʣ ൃੜͨ͠ͱରԠ
-# ᶃIBOETIBLF ᶅDPOOFDU ᶆDPOOFDUFE IBOETIBLFͱDPOOFDU͕ผαʔόʔৼΒΕͯɺίω Ϋγϣϯཱ͕֬Ͱ͖Δɻ ͭ·ΓTUJDLZTFTTJPOෆཁʹͳΔɻ ‣ RedisStoreΛར༻ͨ͠߹ ᶄηογϣϯڞ༗
ᶆηογϣϯใऔಘ ൃੜͨ͠ͱରԠ
͝੩ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ɻ