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
Goだけでロビーサーバーを作ってみた
Search
irieda
October 05, 2018
Programming
2
550
Goだけでロビーサーバーを作ってみた
GoとGopherJSによるIsomorphicな実装で
P2Pメッシュを確立できるロビーサーバーを作ってみた話。
irieda
October 05, 2018
Tweet
Share
More Decks by irieda
See All by irieda
SpaGoでSPAを作ろう!
nobonobo
0
630
TinyGoでIoTを始めよう
nobonobo
2
870
GopherJS+Vecty
nobonobo
1
980
Other Decks in Programming
See All in Programming
2分台で1500examples完走!爆速CIを支える環境構築術 - Kaigi on Rails 2025
falcon8823
3
3.6k
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
310
Server Side Kotlin Meetup vol.16: 内部動作を理解して ハイパフォーマンスなサーバサイド Kotlin アプリケーションを書こう
ternbusty
3
180
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
350
PHPに関数型の魂を宿す〜PHP 8.5 で実現する堅牢なコードとは〜 #phpcon_hiroshima / phpcon-hiroshima-2025
shogogg
1
210
大規模アプリのDIフレームワーク刷新戦略 ~過去最大規模の並行開発を止めずにアプリ全体に導入するまで~
mot_techtalk
1
440
登壇は dynamic! な営みである / speech is dynamic
da1chi
0
310
Foundation Modelsを実装日本語学習アプリを作ってみた!
hypebeans
0
110
Introducing ReActionView: A new ActionView-Compatible ERB Engine @ Kaigi on Rails 2025, Tokyo, Japan
marcoroth
3
1k
iOSエンジニア向けの英語学習アプリを作る!
yukawashouhei
0
200
スマホから Youtube Shortsを見られないようにする
lemolatoon
27
32k
「ちょっと古いから」って避けてた技術書、今だからこそ読もう
mottyzzz
10
6.7k
Featured
See All Featured
Building Applications with DynamoDB
mza
96
6.7k
The Pragmatic Product Professional
lauravandoore
36
6.9k
Imperfection Machines: The Place of Print at Facebook
scottboms
269
13k
Designing Experiences People Love
moore
142
24k
Building an army of robots
kneath
306
46k
A Modern Web Designer's Workflow
chriscoyier
697
190k
A better future with KSS
kneath
239
18k
Building Flexible Design Systems
yeseniaperezcruz
329
39k
GitHub's CSS Performance
jonrohan
1032
470k
Context Engineering - Making Every Token Count
addyosmani
6
240
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
5.6k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
248
1.3M
Transcript
Go ͚ͩͰ ʓʓʓʓΛ࡞ͬͯΈͨ
͓લ୭Αʁ ًؕزٗاؿز㾊 1ZUIPOJTUB(PQIFS זד(Pד剅ְׯֲמה (P娖כ䎃穗麓ְֻ ؟؎ز ⠓爡-BC ַ倜爡せ )/!OPCPOPCP IUUQHPMBOHSEZKQ
ࡢࠓͷ AltJS ࣄ
ߴڃݴޠͷ AltJS 㢌䳔דֹזְ 넝秷鎉铂ך项欵ָ⢪ִזְ 剅ֹ䩛ךأزٖأوحع ֿה׀הֻطةד穄✪
JS ϔϏʔϢʔβʔஊ &4ח㢌䳔כת䗳銲 ׃ַ׃ծ&4ך统׃כ䘌 OPK2VFSZ VTF1SPNJTF &4.ד剅ְג♧אךؿ؋؎ٕחػحָؙ植㹋鍑 "MU+4ז5ZQF4DSJQUָ剣劄
JS ͷπϥϛ ٌآُ٦ٕ堣圓ךⴓ倖 ꬊず劍ך剅ֹ倯ך㢌ꬠ劍 &4غ٦آّٝⴓ倖 㘗ָזְ㘗㼪Ⰵ䩛媮ח״ⴓ倖 ؒ؝ءأذيךⴓ倖 〢ְ٥倜׃ְ鎸鶢ה➰ֹさְ竲ֽ ײְؒٓ٦عٝسؚٔٝ
TypeScript ͳΒʁ 剑倜ך+4鎸鶢㘗ءأذيד剅ֽ 涸㘗鎉铂ך䛷䜋ָ䖤 䧭卓暟ךٌآُ٦ٕװ&4غ٦آّٝ鏣㹀ד鼅ץ +4ך项欵54ך项欵⢪ִ ا٦أوحفד54ا٦أדرغحؚ
ͦ͜Ͱ GopherJS (Pך鎸鶢㢌䳔דֹ (Pךٌآُ٦ٕ堣圓ⵃ欽 ؿ؋؎ٕחػحؙ⳿⸂ KT HP (PQIFS+4ך项欵ָׅץג⢪ִ 涸㘗鎉铂ך䛷䜋ָ䖤 ا٦أوحفד(Pا٦أדرغحؚ
ꬊず劍ך剅ֹ倯כ(Pؐؑ؎ָ然甧幥 (Pך鎸鶢כ։䎃⽃⡘ד㸜㹀׃ג 䓼㔿זؒٓ٦عٝسؚٔٝ俑⻉ 5ZQF4DSJQU״剣劄
GopherJS+Vecty (Pה(Pךワ鴟خ٦ֽٕד ؿٗٝزؒٝسָ圓眠〳腉 ׃$44כⴽ 1BTTXPSE9דך䱰欽✲⢽،ٔ CPPUTUSBQ؝ٝه٦طٝزאֻ׃ )5.-ַ7FDUZ欽鎸鶢欰䧭خ٦ٕאֻ׃ XBTN㼎䘔鹌遤⚥ 馄剣劄ה䙼ג
͜Ε·Ͱͷొஃωλ
Go ϞόΠϧͰϐΞϊ App
GopherJS ͷհ .go .js .map GopherJS
WebRTC Ͱ P2P Cloud NAT NAT Laptop Workstation Smart Phone
Tablet Wireless Access Point
ԾϥδίϯΧʔ
Go Ͱ GUI Λͭ͘Δ "bridge":QObject
Go ͚ͩͰ࡞ΔϑϩϯτΤϯυ
͜ΕΒͷొஃࢿྉʁ (PQIFS+4ד⡲גֶתׅ٦
ूେͱͯ͠ɾɾɾ
Go ͚ͩͰ TPS Λ࡞Γ·ͨ͠
ͱݴ͍͔ͨͬͨΜͰ͢ ͕ɾɾɾ
Go ͚ͩͰϩϏʔαʔόʔΛ࡞ Γ·ͨ͠ חזׯְת׃٥٥٥ s٥ω٥
࡞Δͷʹඞࢮ͗ͯ͢ࢿྉ͕͠ΐ΅͍ͷ͝༰͍ࣻͩ͘͞ɾɾɾ
ߏ ٗؽ٦؟٦غ٦ 11ًحءُطحزٙ٦ؙ 8FC6*ؿٗٝزؒٝس %ٖٝتؚٔٝ
ϩϏʔαʔόʔ 8FC35$欽ءؚشؚٔٝⰯי 8FCTPDLFUTك٦أ ず儗剑㣐,䱸竲ծ,ٕ٦ي䟝㹀 وحثؚٝ䖓11פ獳遤׃גٕ٦يכ嶊徦ׅ չ䖉فٖ؎պז,ِ٦ؠ٦ָׁלֽ فٖ؎➂〡㟓װֽׅז醱侧؟٦غ٦דأ؛٦ٕ 植朐؟٦غ٦תְوحثָؚٝדֹזְָծ 㢩鿇16#46#ָ֮לדֹ״ֲחז
P2P ϝογϡωοτϫʔΫ ؾ،כ(PQIFS+4ד圓眠 8FC35$ך35$%BUB$IBOOFMⵃ欽 ؾ،湱✼ח䱸竲ׅ ِ٦ؠ٦זぐ䱸竲ד䱸竲 鸐⥋כ11ך⡚鹼䒀 鹼䒀㼎瘻갹䓸זְדֿֿ0,
WebRTC ͱ DataChannel ֿתֳֽֿؚؚ֭ג ֿך僰װהJ044BGBSJד0,חז עׯֽإحءّٝ然甧馄וְ 1FFSה1FFSQVCTVC؟٦غ٦⢪גאזּךח ⚺㼪埄ָ❛✼ח䊡״ֲח➬鴥ךָוְ
ͦ͜Ͱٯసͷൃ ଓͷ͖͔͚ͬ Peer ͔Β Server ͚ͩͲɺ ੍ޚ Server ͔Β Peer
ʹ͢Δɻ ओैٯసͷൃ
Peer-Server-Room
ͦ͏͢Δͱ 1FFSכ31$؟٦غ٦؟٦ـ 1FFSכ31$؟٦غ٦؟٦ـ 4FSWFSכ1FFSדDSFBUF0FS㹋遤 4FSWFSכ1FFSדDSFBUF"OTXFS㹋遤
4FSWFSכ1FFSח"OTXFS床ׅ 31$ה⚺䖞鷞鯄ד⚺㼪埄床ֿׅהזֻ ء٦؛ٝءٍٕח11إحءّٝ然甧דֹ
݁Ռ ٗؽ٦הًحءُ然甧תד遤玎䏝 *TPNPQIJDַֿSQDָךתת籬ָ ぐ1FFSًحءُדאזּך 4FSWFS⩎דٕ٦ف穈ֽד0, 姻䌢ח然甧דֹ֮הכ11ד 4FSWFSכ8FC4PDLFUTⴖ倖ׅ
Web-UI ϑϩϯτΤϯυ (PQIFS+4欽ؿٗٝزؒٝسٓ؎ـٓٔ SFBDUٓ؎ؙ (P鎸鶢ד)5.-+4أة؎ٕ邌植 XBTN㼎䘔㨣תג
3D ϨϯμϦϯά three.js (PQIFS+4כKT项欵ָ⢪ִָծ 床ׅץֹ⦼ח♶⪒ָ֮ג 搀鋔׃ג劍䖉鸐חזזְ הְֲ⹛涸鎉铂ך㹀䒷ֹ鴥ד׃תֲ ຊ͜͜ Go ʹ͍ͨ͠
⹛ֻ״ֲחזגַוֲַַזְָ ಈ࡞σϞ https://gophertank.irieda.com
ڝ߹ͷϚονϯάʢϩϏʔʣ αʔόʔ (P㹋鄲ח״ٗؽ٦؟٦غ٦ך畸さ ֿחכ11؝طؙءّٝ堣腉כזְ ِ٦ؠ٦侧ח嫰⢽׃ג؟٦غ٦ٔا٦أؖٝؖٝ⢪ׯֲ (PPHMFכ㉀㡰涸חָ姻׃ְ ֿ⡚ٖ؎ذٝءֲגכְֽו11ָ剑䓼״יկ IUUQTHJUIVCDPNIFSPJDMBCTOBLBNB IUUQTHJUIVCDPN(PPHMF$MPVE1MBUGPSNPQFONBUDI
·ͱΊ GopherJS ༗ Vecty ༗ೳ Isomorphic ͍͍ͧ wasm ͷນ։͚͙ͦͩ͢͜ RTC
ηογϣϯʹ RPC ͱओैٯస͕༗ޮ Go ʹ WebGL αϙʔτϥΠϒϥϦ͕ཉ͍͠ P2P Ԇੑೳ͕࠷ڧ
(PQIFS+4ך㈓♧ך䓲挿כⰕ䒭ׄׯזַהֿ XBTN㼎䘔晛ָⰕ䒭ח《鴥ת זךד➙䖓כ㣐䩛䮶ג⢪ִ XBTNXFCSUDכװׅץגךًآٍ٦橆㞮ד⹛ֻ
͓ΘΓ