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
540
Goだけでロビーサーバーを作ってみた
GoとGopherJSによるIsomorphicな実装で
P2Pメッシュを確立できるロビーサーバーを作ってみた話。
irieda
October 05, 2018
Tweet
Share
More Decks by irieda
See All by irieda
SpaGoでSPAを作ろう!
nobonobo
0
610
TinyGoでIoTを始めよう
nobonobo
2
850
GopherJS+Vecty
nobonobo
1
940
Other Decks in Programming
See All in Programming
コード書くの好きな人向けAIコーディング活用tips #orestudy
77web
3
320
[初登壇@jAZUG]アプリ開発者が気になるGoogleCloud/Azure+wasm/wasi
asaringo
0
130
Javaのルールをねじ曲げろ!禁断の操作とその代償から学ぶメタプログラミング入門 / A Guide to Metaprogramming: Lessons from Forbidden Techniques and Their Price
nrslib
3
2k
既存デザインを変更せずにタップ領域を広げる方法
tahia910
1
240
Is Xcode slowly dying out in 2025?
uetyo
1
170
生成AIで日々のエラー調査を進めたい
yuyaabo
0
610
都市をデータで見るってこういうこと PLATEAU属性情報入門
nokonoko1203
1
540
イベントストーミングから始めるドメイン駆動設計
jgeem
4
870
データの民主化を支える、透明性のあるデータ利活用への挑戦 2025-06-25 Database Engineering Meetup#7
y_ken
0
270
地方に住むエンジニアの残酷な現実とキャリア論
ichimichi
2
600
DroidKnights 2025 - 다양한 스크롤 뷰에서의 영상 재생
gaeun5744
3
300
Perplexity Slack Botを作ってAI活用を進めた話 / AI Engineering Summit プレイベント
n3xem
0
670
Featured
See All Featured
Designing Experiences People Love
moore
142
24k
What’s in a name? Adding method to the madness
productmarketing
PRO
22
3.5k
Why You Should Never Use an ORM
jnunemaker
PRO
56
9.4k
Intergalactic Javascript Robots from Outer Space
tanoku
271
27k
How to Think Like a Performance Engineer
csswizardry
24
1.7k
How to train your dragon (web standard)
notwaldorf
92
6.1k
The Language of Interfaces
destraynor
158
25k
Practical Orchestrator
shlominoach
188
11k
The Power of CSS Pseudo Elements
geoffreycrofte
77
5.8k
Building a Modern Day E-commerce SEO Strategy
aleyda
41
7.3k
Documentation Writing (for coders)
carmenintech
71
4.9k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
30
2.1k
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כװׅץגךًآٍ٦橆㞮ד⹛ֻ
͓ΘΓ