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.8k
サムザップにおけるNotionの 活用事例とPHPでのNotionAPIを利用した仕組み構築の紹介
sgeengineer
0
2k
Laravel OctaneをどうしてもPharで運用したい話
sgeengineer
2
2.5k
大規模Unityゲーム開発の設計事例 〜ドメイン駆動設計とDIコンテナを導入した一年を振り返る〜 / cedec2021-ddd
sgeengineer
2
14k
ロボットを動かすビジュアルプログラミングでできることはPHPでもできる!
sgeengineer
0
1.7k
PHP8版!Swooleのフレームワークを比べてみた
sgeengineer
1
2.7k
「戦国炎舞 -KIZNA-」で行ったAWSのコスト最適化の話
sgeengineer
0
1.8k
AirtestとPocoとOpenSTFによるUnity製スマートフォン向けゲームの実機自動テスト環境構築とその利用方法
sgeengineer
0
5.1k
PHPでgRPCって どこまでいけるの?
sgeengineer
0
4.9k
Other Decks in Programming
See All in Programming
PicoRuby on Rails
makicamel
2
110
Google Agent Development Kit でLINE Botを作ってみた
ymd65536
2
200
Composerが「依存解決」のためにどんな工夫をしているか #phpcon
o0h
PRO
1
240
ニーリーにおけるプロダクトエンジニア
nealle
0
580
Modern Angular with Signals and Signal Store:New Rules for Your Architecture @enterJS Advanced Angular Day 2025
manfredsteyer
PRO
0
130
プロダクト志向なエンジニアがもう一歩先の価値を目指すために意識したこと
nealle
0
110
関数型まつり2025登壇資料「関数プログラミングと再帰」
taisontsukada
2
850
datadog dash 2025 LLM observability for reliability and stability
ivry_presentationmaterials
0
120
Team operations that are not burdened by SRE
kazatohiei
1
260
なぜ「共通化」を考え、失敗を繰り返すのか
rinchoku
1
570
エラーって何種類あるの?
kajitack
5
310
Java on Azure で LangGraph!
kohei3110
0
170
Featured
See All Featured
Why Our Code Smells
bkeepers
PRO
337
57k
Speed Design
sergeychernyshev
32
1k
Facilitating Awesome Meetings
lara
54
6.4k
GitHub's CSS Performance
jonrohan
1031
460k
What’s in a name? Adding method to the madness
productmarketing
PRO
23
3.5k
The Cult of Friendly URLs
andyhume
79
6.5k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
161
15k
Code Reviewing Like a Champion
maltzj
524
40k
Designing for Performance
lara
609
69k
How to Think Like a Performance Engineer
csswizardry
24
1.7k
Done Done
chrislema
184
16k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
5
230
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Λར༻ͨ͠߹ ᶄηογϣϯڞ༗
ᶆηογϣϯใऔಘ ൃੜͨ͠ͱରԠ
͝੩ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ɻ