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
“いい感じ“な定量評価を求めて - Four Keysとアウトカムの間の探求 -
nealle
2
11k
Azure AI Foundryではじめてのマルチエージェントワークフロー
seosoft
0
190
Advanced Micro Frontends: Multi Version/ Framework Scenarios @WAD 2025, Berlin
manfredsteyer
PRO
0
290
テストから始めるAgentic Coding 〜Claude Codeと共に行うTDD〜 / Agentic Coding starts with testing
rkaga
13
4.9k
Goで作る、開発・CI環境
sin392
0
240
PicoRuby on Rails
makicamel
2
130
Google Agent Development Kit でLINE Botを作ってみた
ymd65536
2
260
ご注文の差分はこちらですか? 〜 AWS CDK のいろいろな差分検出と安全なデプロイ
konokenj
2
120
すべてのコンテキストを、 ユーザー価値に変える
applism118
3
1.4k
AI時代の『改訂新版 良いコード/悪いコードで学ぶ設計入門』 / ai-good-code-bad-code
minodriven
20
8.1k
なんとなくわかった気になるブロックテーマ入門/contents.nagoya 2025 6.28
chiilog
1
280
ruby.wasmで多人数リアルタイム通信ゲームを作ろう
lnit
3
490
Featured
See All Featured
Learning to Love Humans: Emotional Interface Design
aarron
273
40k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
29
2.7k
How to Think Like a Performance Engineer
csswizardry
25
1.7k
Six Lessons from altMBA
skipperchong
28
3.9k
Statistics for Hackers
jakevdp
799
220k
Why You Should Never Use an ORM
jnunemaker
PRO
58
9.4k
We Have a Design System, Now What?
morganepeng
53
7.7k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
126
53k
What’s in a name? Adding method to the madness
productmarketing
PRO
23
3.5k
Mobile First: as difficult as doing things right
swwweet
223
9.7k
Fashionably flexible responsive web design (full day workshop)
malarkey
407
66k
GraphQLとの向き合い方2022年版
quramy
49
14k
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Λར༻ͨ͠߹ ᶄηογϣϯڞ༗
ᶆηογϣϯใऔಘ ൃੜͨ͠ͱରԠ
͝੩ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ɻ