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
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
mackee
February 16, 2016
Programming
4.4k
0
Share
WebSocket Connection Proxy kuiperbeltの プラグイン機構の実装
Shibuya.go
http://shibuyago.connpass.com/event/25852/
mackee
February 16, 2016
More Decks by mackee
See All by mackee
perlをWebAssembly上で動かすと何が嬉しいの??? / Where does Perl-on-Wasm actually make sense?
mackee
0
730
Agentに至る道 〜なぜLLMは自動でコードを書けるようになったのか〜
mackee
6
5.3k
今!ソフトウェアエンジニアがハードウェアに手を出すには
mackee
14
6.7k
ワンバイナリWebサービスのススメ
mackee
10
8.6k
tanukistack ライブコーディング / tanukistack live-coding
mackee
0
530
range over funcの使い道と非同期N+1リゾルバーの夢 / about a range over func
mackee
0
1.1k
perl for shell, awk and sed programmers
mackee
3
2.7k
今更GoのWebフレームワークを作ろうとしているワケ / Why am I trying to create a Go web framework now?
mackee
1
1.1k
database/sqlでNullを扱う歴史とsql.Null[T]の登場 / sql.Null[T] history
mackee
0
960
Other Decks in Programming
See All in Programming
コードレビューをしない選択 #でぃーぷらすトウキョウ
kajitack
3
1.2k
Fundamentals of Software Engineering In the Age of AI
therealdanvega
2
310
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
1.2k
Ruby and LLM Ecosystem 2nd
koic
1
1.4k
Claude Code Skill入門
mayahoney
0
450
S3ストレージクラスの「見える」「ある」「使える」は全部違う ─ 体験から見た、仕様の深淵を覗く
ya_ma23
0
1.2k
今年もTECHSCOREブログを書き続けます!
hiraoku101
0
200
KagglerがMixSeekを触ってみた
morim
0
350
ロボットのための工場に灯りは要らない
watany
12
3.2k
脱 雰囲気実装!AgentCoreを良い感じにWEBアプリケーションに組み込むために
takuyay0ne
3
420
モックわからないマン卒業記 ~振る舞いを起点に見直した、フロントエンドテストにおけるモックの使いどころ~
tasukuwatanabe
3
430
What Spring Developers Should Know About Jakarta EE
ivargrimstad
0
820
Featured
See All Featured
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
1
140
Beyond borders and beyond the search box: How to win the global "messy middle" with AI-driven SEO
davidcarrasco
3
97
Measuring & Analyzing Core Web Vitals
bluesmoon
9
800
Bridging the Design Gap: How Collaborative Modelling removes blockers to flow between stakeholders and teams @FastFlow conf
baasie
0
500
Everyday Curiosity
cassininazir
0
180
Paper Plane (Part 1)
katiecoart
PRO
0
6.2k
What Being in a Rock Band Can Teach Us About Real World SEO
427marketing
0
200
Redefining SEO in the New Era of Traffic Generation
szymonslowik
1
260
The State of eCommerce SEO: How to Win in Today's Products SERPs - #SEOweek
aleyda
2
10k
Color Theory Basics | Prateek | Gurzu
gurzu
0
270
<Decoding/> the Language of Devs - We Love SEO 2024
nikkihalliwell
1
170
The SEO identity crisis: Don't let AI make you average
varn
0
430
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/