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.1k
Laravel OctaneをどうしてもPharで運用したい話
sgeengineer
2
2.6k
大規模Unityゲーム開発の設計事例 〜ドメイン駆動設計とDIコンテナを導入した一年を振り返る〜 / cedec2021-ddd
sgeengineer
2
15k
ロボットを動かすビジュアルプログラミングでできることはPHPでもできる!
sgeengineer
0
1.8k
PHP8版!Swooleのフレームワークを比べてみた
sgeengineer
1
2.8k
「戦国炎舞 -KIZNA-」で行ったAWSのコスト最適化の話
sgeengineer
0
1.9k
AirtestとPocoとOpenSTFによるUnity製スマートフォン向けゲームの実機自動テスト環境構築とその利用方法
sgeengineer
0
5.2k
PHPでgRPCって どこまでいけるの?
sgeengineer
0
5k
Other Decks in Programming
See All in Programming
登壇は dynamic! な営みである / speech is dynamic
da1chi
0
300
CSC305 Lecture 05
javiergs
PRO
0
210
非同期jobをtransaction内で 呼ぶなよ!絶対に呼ぶなよ!
alstrocrack
0
720
Go Conference 2025: Goで体感するMultipath TCP ― Go 1.24 時代の MPTCP Listener を理解する
takehaya
9
1.7k
Swift Concurrency - 状態監視の罠
objectiveaudio
2
510
Devvox Belgium - Agentic AI Patterns
kdubois
1
120
Le côté obscur des IA génératives
pascallemerrer
0
140
株式会社 Sun terras カンパニーデック
sunterras
0
280
CSC509 Lecture 06
javiergs
PRO
0
260
複雑化したリポジトリをなんとかした話 pipenvからuvによるモノレポ構成への移行
satoshi256kbyte
1
1k
階層構造を表現するデータ構造とリファクタリング 〜1年で10倍成長したプロダクトの変化と課題〜
yuhisatoxxx
3
1k
2分台で1500examples完走!爆速CIを支える環境構築術 - Kaigi on Rails 2025
falcon8823
3
3.6k
Featured
See All Featured
GitHub's CSS Performance
jonrohan
1032
470k
Statistics for Hackers
jakevdp
799
220k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
32
2.3k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
23
1.5k
Navigating Team Friction
lara
190
15k
Documentation Writing (for coders)
carmenintech
75
5k
YesSQL, Process and Tooling at Scale
rocio
173
14k
Raft: Consensus for Rubyists
vanstee
139
7.1k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
114
20k
Build The Right Thing And Hit Your Dates
maggiecrowley
37
2.9k
For a Future-Friendly Web
brad_frost
180
9.9k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
30
2.9k
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Λར༻ͨ͠߹ ᶄηογϣϯڞ༗
ᶆηογϣϯใऔಘ ൃੜͨ͠ͱରԠ
͝੩ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ɻ