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
WebSocket Connection Proxy kuiperbeltの プラグイン機構の実装
Search
mackee
February 16, 2016
Programming
4.5k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
WebSocket Connection Proxy kuiperbeltの プラグイン機構の実装
Shibuya.go
http://shibuyago.connpass.com/event/25852/
mackee
February 16, 2016
More Decks by mackee
See All by mackee
Go1.27で導入されるジェネリクスメソッドでできること
mackee
0
320
perlをWebAssembly上で動かすと何が嬉しいの??? / Where does Perl-on-Wasm actually make sense?
mackee
0
1.1k
Agentに至る道 〜なぜLLMは自動でコードを書けるようになったのか〜
mackee
6
6k
今!ソフトウェアエンジニアがハードウェアに手を出すには
mackee
14
7.2k
ワンバイナリWebサービスのススメ
mackee
10
8.9k
tanukistack ライブコーディング / tanukistack live-coding
mackee
0
730
range over funcの使い道と非同期N+1リゾルバーの夢 / about a range over func
mackee
0
1.2k
perl for shell, awk and sed programmers
mackee
3
2.9k
今更GoのWebフレームワークを作ろうとしているワケ / Why am I trying to create a Go web framework now?
mackee
1
1.1k
Other Decks in Programming
See All in Programming
OSINT for SRE: 学術論文とポストモーテムから探る システム障害の共通パターン / SRE NEXT 2026
tomoyk
1
3.9k
Prismを使った型安全な暗号化_関数型まつり2026
_fhhmm
0
140
Foundation Models frameworkで画像分析
ryodeveloper
1
120
作るコストが小さくなった時代 幸せに働くために改めて考えたいこと 〜エンジニアとして価値を出し続けるために注視している二分野〜
yuppeeng
0
110
なぜ関数型プログラミングで「型」と「証明」が語られるのか #fp_matsuri
kajitack
3
970
ローカルLLMでどこまでコードが書けるか -縮小版 / How much code can be written on a local LLM Shortened
kishida
2
190
言語を使う側から、作る側へ。 自作 Lisp で得た新たな気づき。
andpad
0
130
광주소프트웨어마이스터고등학교 DevFest 특강 - 바이브 코딩 시대에서 주니어 개발자로 살아남는 방법
utilforever
1
140
AI時代、エンジニアはどう育つのか -未経験エンジニアの成長を間近で見て考えたこと-
thasu0123
0
130
PHP に部分適用が来るぞ!……ところで何それ?おいしいの? #phpcon / phpcon-2026
shogogg
0
270
act1-costs.pdf
sumedhbala
0
240
はてなアカウント基盤 State of the Union
cockscomb
1
1.3k
Featured
See All Featured
Principles of Awesome APIs and How to Build Them.
keavy
128
18k
Rails Girls Zürich Keynote
gr2m
96
14k
The Curse of the Amulet
leimatthew05
2
13k
Leveraging Curiosity to Care for An Aging Population
cassininazir
1
400
Crafting Experiences
bethany
1
220
HDC tutorial
michielstock
2
750
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
Learning to Love Humans: Emotional Interface Design
aarron
275
41k
WCS-LA-2024
lcolladotor
0
720
Redefining SEO in the New Era of Traffic Generation
szymonslowik
1
360
Balancing Empowerment & Direction
lara
6
1.2k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
Transcript
WebSocket Connection Proxy kuiperbeltͷ ϓϥάΠϯػߏͷ࣮ @mackee_w a.k.a macopy
• twitter:@mackee_w • github:mackee • ໘ന๏ਓΧϠοΫ • ιʔγϟϧήʔϜͷ ։ൃͱӡ༻PG •
Perl / Go ୭ʁ
ॻ͍ͨύοέʔδ • github.com/mackee/go-sqlla • code generate͢Δײ͡ͷΫΤϦϏϧμ
ॻ͍ͨύοέʔδ • github.com/mackee/go-sqlla • code generate͢Δײ͡ͷΫΤϦϏϧμ
ॻ͍ͨύοέʔδ • github.com/mackee/go-genddl • struct͔ΒSQLͷDDLΛ࡞Δ܅
ॻ͍ͨύοέʔδ • github.com/mackee/go-genddl • struct͔ΒSQLͷDDLΛ࡞Δ܅
go generateେ͖ਓؒͰ͢
࠷ۙ(ࣄͰ)ͬͨ͜ͱ https://speakerdeck.com/mackee/perl-plus-goshi-yun-yong-falsehua
PerlͷҰຕΞϓϦ͔Β GoΓग़͠ • ෳDBΛԣஅ͢ΔΑ͏ͳใΛ࣋ͬͨAPI αʔόΛGoͰॻ͍ͯΓग़͢ • ϢʔβొɺIDൃ൪ɺιʔγϟϧάϥϑetc… • ιʔγϟϧήʔϜΛશ෦GoͰॻ͘ͷ·ͩͭ Β͍ͱ͍͏ҹ
ιʔγϟϧήʔϜͷ ػೳͷଟ͞
ιʔγϟϧήʔϜͷػೳͷଟ͞ • ϑϨϯυొ • ثతͳϠπͷඋɺ߹ɺਐԽ • Ψνϟ • ҭཁૉ(͢͝Ζ͘) •
GvG(ࢼ߹)
ιʔγϟϧήʔϜͷػೳͷଟ͞ • ϑϨϯυొ • ثతͳϠπͷඋɺ߹ɺਐԽ • Ψνϟ • ҭཁૉ(͢͝Ζ͘) •
GvG(ࢼ߹) • ɾɾɾ͜ΕΒΛϦΞϧλΠϜͰɹˡNew!
ϦΞϧλΠϜʁʁʁʁ
࠷ۙͷτϨϯυͱͯ͠ͷ ϦΞϧλΠϜ • GvGͱ͔PvPͱ͔ͷରਓઓڠྗϓϨΠ͕ग़ͯ ͖ͯɺଞਓͷεϚϗͰߦͬͨߦಈΛʮଈ࠲ʹʯ ࣗͷͱ͜Ζʹөͤ͞Δඞཁ͕͋Δ • ϦΞϧλΠϜײͱ͍͏ͷɺΓ্͕ΓΛԋ शͭͨ͠Γਓͱ͍ͬͯΔײΛग़͢ͷʹඞཁ ͳཁૉʹͳΓͭͭ͋Δ
ϦΞϧλΠϜͷ࣮ݱํ๏ • ྫ͑ಠࣗϓϩτίϧΛੜιέοτͰ͠ΌΔήʔϜαʔόΛ C++͋ͨΓͰॻ͘ • ήʔϜαʔόͱϦΞϧλΠϜ෦ʹඞཁͳήʔϜͷཁૉ෦ (εΩϧൃಈʂͱ͔)࣮ͯ͠DBʹॻ͖ࠐΜͩΓͱ͔ • Ή͠ΖDBհͣ͞ʹͳΜ͔಄͍͍ײ͡ͰԣͱΓऔΓͨ͠Γͱ ͔
• HTTP͠ΌΔαʔό͔͠ॻ͍͖͍ͯͯͳ͍ͷʹͦΜͳεΩϧ ͳ͔ͬͨɾɾɾ
ιέοτͱ͔Α͘Θ͔Μͳ͍ ͷͰ Webඪ४ʹ͔ͬΓ·͢ ↓ WebSocket
PerlͰWebSocketΛ͠Ό…… WSͰͭͳ͙
PerlͰWebSocketΛ͠Ό…… ͝ʹΐ͝ʹΐܭࢉ…
PerlͰWebSocketΛ͠Ό…… DBʹॻ͖ࠐΈத…
PerlͰWebSocketΛ͠Ό…… DBʹॻ͖ࠐΈத… WSͰͭͳ͙…
PerlͰWebSocketΛ͠Ό…… DBʹॻ͖ࠐΈத… WSͰͭͳ͙… ͪΐͬͱࠓࣄதͳΜͰ…
PerlͰWebSocketΛ͠Ό…… DBʹॻ͖ࠐΈத… ͑ͬ ͪΐͬͱࠓࣄதͳΜͰ…
ͬͺΓC++Ͱ……
ͦ͏ͩWSΛ͠Όͬͯ ͭͳ͗ͬͺʹͯ͘͠ΕΔ ઐ༻ͷαʔόΛॻ͜͏ ↓ kuiperbelt
͍͍ͩͨ͜Μͳײ͡ • client͕kuiperbeltʹWSͰͭͳ͛ΔͱޙΖͷ PerlʹೝূϦΫΤετΛ͛ͯ200ͩͬͨΒ WS։࢝ • ޙΖͷPerl͔ΒkuiperbeltʹHTTPͰϦΫΤε τΛ͛ΔͱWSͰϝοηʔδΛૹ͢Δ
͍͍ͩͨҎԼͷهࣄʹ http://qiita.com/mackee_w/items/b6036d132888caaf5f98
ΫϥελԽͱ ϓϥάΠϯͷ
ݱঢ়ͷkuiperbeltͷࢄͷ Έ • Ұ൪ॳΊͷೝূϦΫΤετͷ࣌ʹϔομʹࣗͷϗ ετ໊Λ͚ͯૹ͍ͬͯΔ • ͜ͷΫϥΠΞϯτʹૹΓ͍ͨͱ͖ͦͷϗετ໊Λ ͍ͬͯͩ͘͞ͱͳΔ(redisͱ͔ʹอଘ͠ͱ͍ͯͶ) • ͜ΕͩͱͲͷαʔόʹͲͷΫϥΠΞϯτ͕ͿΒԼ͕ͬ
͍ͯΔ͔ΛόοΫΤϯυଆ͕ҙࣝ͠ͳ͍ͱ͍͚ͳ͍
ݱঢ়ͷkuiperbeltͷࢄͷ Έ LVJQFSCFMU CBDLFOE
LVJQFSCFMU CBDLFOE ೝূͷͱ͖ʹ ͭͳ͕ͬͨkuiperbeltͷϗετΛ௨͢Δ ଓ࣌
CBDLFOE LVJQFSCFMU ηογϣϯΩʔͱϗετ໊ͷϖΞΛอଘ ଓ࣌
CBDLFOE LVJQFSCFMU ηογϣϯΩʔ͔Βϗετ໊ΛऔΔ ૹ৴࣌
CBDLFOE ϗετ໊Ͱͭͳ͕͍ͬͯΔkuiperbeltΛࢦ໊ͯ͠ ௨৴͢Δ ૹ৴࣌ LVJQFSCFMU
όοΫΤϯυ͕ Ͳͷαʔόʹͭͳ͕͍ͬͯΔ ͔Ͳ͏͔Λߟྀ͢Δඞཁ͕͋ Δ
ͦͷଞϦΞϧλΠϜήʔϜαʔ όͷྫ • ʮ͍ͭ͜ʹͭͳ͛ʂʯ͍ͬͯ͏αʔόΛࣄલ ʹAPIͰࢦఆ͍ͯͦͭ͠ʹܨ͍ͰΒ͏ • ϝϦοτ: ภΓΛίϯτϩʔϧ • Ͳ͜ʹͭͳ͍ͰͲ͜ʹૹ৴ͯ͠Α͠ͳʹ
ϝοηʔδΛૹͬͯ͘ΕΔ
ͦͷଞϦΞϧλΠϜήʔϜαʔ όͷྫ • ʮ͍ͭ͜ʹͭͳ͛ʂʯ͍ͬͯ͏αʔόΛࣄલ ʹAPIͰࢦఆ͍ͯͦͭ͠ʹܨ͍ͰΒ͏ • ϝϦοτ: ภΓΛίϯτϩʔϧ • Ͳ͜ʹͭͳ͍ͰͲ͜ʹૹ৴ͯ͠Α͠ͳʹ
ϝοηʔδΛૹͬͯ͘ΕΔ ͜ΕΛΓ͍ͨʂʂʂ ↓
node.jsͱ͔ͰΑ͋͘Δͭ ↓ ԣͷҙࢥૄ௨ʹ redis pubsubΛ͏
pubsubΛར༻͢Δ • ͕͍ࣗ࣋ͬͯΔΫϥΠΞϯτͰ͋Εࠓ· ͰͲ͓Γ͍ͦͭʹϝοηʔδΛૹ • ͍࣋ͬͯͳ͚ΕΫϥΠΞϯτ͕͋Δ͔Ͳ͏ ͔Λ͍߹Θͤͯpublish͢Δ • όοΫΤϯυଆΫϥΠΞϯτͱαʔόͷ ΛҙࣝͤͣʹϝοηʔδΛ͛ΒΕΔ
શһʹඞਢͷػೳ͔ʁ • ผʹόοΫΤϯυ͕ؤுΕredisͷυϥΠό ΛೖΕͳͯ͘ྑ͍ • redis pubsubҎ֎ʹಉ༷ͷػೳΛผͷΓ ํͰ࣮ݱͰ͖ΔՄೳੑ͕͋Δ • ແͯ͘ಈ͘Α͏ʹ࡞Εͳ͘ͳ͍
ϓϥάΠϯԽ͢Δ
GoͷϓϥάΠϯ • goϏϧυ࣌ʹશ෦ͷϥΠϒϥϦΛؚΊͯ͠ ·͏ͷͰಈతϩʔυͷΈ͕ͳ͍(1.5ͰϥΠ ϒϥϦԽग़དྷΔͷೖ͕ͬͨ·ͩෆ҆ఆͱ͍ ͏͔͑Δͷ͔ʁ) • ผͷϓϩηεͱ্ཱͯͪ͛ͯ͠ϓϩηεؒ௨ ৴͢Δͷ͕Ұൠత
GoͷແཧΓϓϥάΠϯԽ .BJO1SPDFTT 1MVHJO1SPDFTT" 1MVHJO1SPDFTT# ϓϩηεؒ௨৴
github.com/dullgiulio/pingo • net/rpc + pluginͷϓϩηεؒͰΑ͠ͳʹίω Ϋγϣϯషͬͯ͘ΕΔ + stdout/errͷ౷߹ • جຊతʹnet/rpcͳͷͰͦΕҎ্ग़དྷͳ͍
• ίϚϯυʹউखʹΦϓγϣϯ͕ੜ͑Δ
͍ํ
͍ํ ͭͳ͛ͯ͠·͑͋ͱnet/rpc
͍ํ structΛొ͢Δͱ͍ͦͭͷmethodΛ ݺΔΑ͏ʹͳΔ
ࠐΜͩͱ͜Ζ • ଓ࣌ -> hookͯ͠pluginʹొ • pluginଆredisͰchannelΛsubscribe • அ࣌ ->
hookͯ͠plugin͔Βআ • pluginଆsubscribe͍ͯ͠ΔνϟϯωϧΛ আ
ࠐΜͩͱ͜Ζ • ૹ৴࣌ -> ࣗʹΩʔ͕ͳ͚Εpluginʹ͛Δ • pluginͱΓ͋͑ͣpublish͢Δ͕ड͚Δ subscriber͕͍ͳ͚Εແ͍ΑͬͯΤϥʔΛฦ͢ • ड৴࣌
-> pluginͷsubscribeΛݟ͍ͯΔ͕ͭདྷͨ Βϩϯάϙʔϧ(?)͍ͯ͠ΔRPCͰϝοηʔδΛฦ͢ (ͬͱ͏·͘Γ͍ͨ)
demo (͕࣌ؒ͋ͬͨΒ)
·ͱΊ • PerlͰDBͱ͔Λ·ͱʹ͍ͭͭWSΓ͍ͨ ͷͰGoͰαʔόॻ͖·ͨ͠ • GoͰແཧΓPluginॻ͍ͯͦͷαʔόʹredis pub/subͬͯෳݐͯΒΕΔΑ͏ʹ͠·ͨ͠ • GoͰಈతϩʔυग़དྷΔΑ͏ʹͳͬͯ΄͍͠
Yokohama\.(go|pm6?)Γ·͢ʂ http://yokohamapm.connpass.com/event/26969/