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
2.2k
サムザップにおけるNotionの 活用事例とPHPでのNotionAPIを利用した仕組み構築の紹介
sgeengineer
0
2.5k
Laravel OctaneをどうしてもPharで運用したい話
sgeengineer
2
3.1k
大規模Unityゲーム開発の設計事例 〜ドメイン駆動設計とDIコンテナを導入した一年を振り返る〜 / cedec2021-ddd
sgeengineer
2
16k
ロボットを動かすビジュアルプログラミングでできることはPHPでもできる!
sgeengineer
0
2.2k
PHP8版!Swooleのフレームワークを比べてみた
sgeengineer
1
3.3k
「戦国炎舞 -KIZNA-」で行ったAWSのコスト最適化の話
sgeengineer
0
2.3k
AirtestとPocoとOpenSTFによるUnity製スマートフォン向けゲームの実機自動テスト環境構築とその利用方法
sgeengineer
0
5.6k
PHPでgRPCって どこまでいけるの?
sgeengineer
0
5.4k
Other Decks in Programming
See All in Programming
ノイジーネイバー問題を解決する 公平なキューイング
occhi
0
110
生成AIを使ったコードレビューで定性的に品質カバー
chiilog
1
280
LLM Observabilityによる 対話型音声AIアプリケーションの安定運用
gekko0114
2
440
20260127_試行錯誤の結晶を1冊に。著者が解説 先輩データサイエンティストからの指南書 / author's_commentary_ds_instructions_guide
nash_efp
1
990
高速開発のためのコード整理術
sutetotanuki
1
410
AI & Enginnering
codelynx
0
120
React Native × React Router v7 API通信の共通化で考えるべきこと
suguruooki
0
100
MUSUBIXとは
nahisaho
0
140
それ、本当に安全? ファイルアップロードで見落としがちなセキュリティリスクと対策
penpeen
7
4k
開発者から情シスまで - 多様なユーザー層に届けるAPI提供戦略 / Postman API Night Okinawa 2026 Winter
tasshi
0
210
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
620
dchart: charts from deck markup
ajstarks
3
1k
Featured
See All Featured
The Director’s Chair: Orchestrating AI for Truly Effective Learning
tmiket
1
99
Site-Speed That Sticks
csswizardry
13
1.1k
sira's awesome portfolio website redesign presentation
elsirapls
0
150
Ruling the World: When Life Gets Gamed
codingconduct
0
150
Getting science done with accelerated Python computing platforms
jacobtomlinson
2
120
What's in a price? How to price your products and services
michaelherold
247
13k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
231
22k
Mind Mapping
helmedeiros
PRO
0
90
The untapped power of vector embeddings
frankvandijk
1
1.6k
Organizational Design Perspectives: An Ontology of Organizational Design Elements
kimpetersen
PRO
1
470
What’s in a name? Adding method to the madness
productmarketing
PRO
24
3.9k
Bash Introduction
62gerente
615
210k
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Λར༻ͨ͠߹ ᶄηογϣϯڞ༗
ᶆηογϣϯใऔಘ ൃੜͨ͠ͱରԠ
͝੩ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ɻ