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
490
Goだけでロビーサーバーを作ってみた
GoとGopherJSによるIsomorphicな実装で
P2Pメッシュを確立できるロビーサーバーを作ってみた話。
irieda
October 05, 2018
Tweet
Share
More Decks by irieda
See All by irieda
SpaGoでSPAを作ろう!
nobonobo
0
500
TinyGoでIoTを始めよう
nobonobo
2
710
GopherJS+Vecty
nobonobo
1
800
Other Decks in Programming
See All in Programming
見た目から始める生産性向上
ikumatadokoro
7
850
障害対応を起点としたもっといい開発と運用のサイクル作りのためにできること / Hatena Enginner Seminar #29
polamjag
0
180
Let's learn code review
riofujimon
2
410
Hanami and htmx
bkuhlmann
0
210
SwiftUIで使いやすいToastの作り方 / How to build a Toast system which is easy to use in SwiftUI
lovee
3
150
SIMD Parallel Programming with the Vector API
josepaumard
0
180
Ruby GitHub Packages
bkuhlmann
0
630
サイコロで理解する統計的仮説検定の考え方
tatamiya
4
950
CA.swift19 恋するAIアプリ開発の裏側
oskmr
0
360
educure_カリキュラム生操作マニュアル.pdf
linew_official
0
810
MetricKitで予期せぬ終了を検知する話 / Detect unexpected termination with MetricKit
nekowen
1
190
GitHub Actionsで泣かないためにやっておきたい設定 / Recommended GHA settings to avoid crying
pinkumohikan
3
540
Featured
See All Featured
Why You Should Never Use an ORM
jnunemaker
PRO
51
8.6k
Principles of Awesome APIs and How to Build Them.
keavy
121
16k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
155
14k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
40
4.4k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
659
120k
How to name files
jennybc
65
93k
Music & Morning Musume
bryan
41
5.6k
Optimizing for Happiness
mojombo
370
69k
Put a Button on it: Removing Barriers to Going Fast.
kastner
58
3.1k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
21
1.6k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
7
1k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
30
6k
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כװׅץגךًآٍ٦橆㞮ד⹛ֻ
͓ΘΓ