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
650
perlをWebAssembly上で動かすと何が嬉しいの??? / Where does Perl-on-Wasm actually make sense?
mackee
0
1.2k
Agentに至る道 〜なぜLLMは自動でコードを書けるようになったのか〜
mackee
6
6.1k
今!ソフトウェアエンジニアがハードウェアに手を出すには
mackee
14
7.3k
ワンバイナリWebサービスのススメ
mackee
10
9.1k
tanukistack ライブコーディング / tanukistack live-coding
mackee
0
770
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
Building a Meta Ray-Ban display app
akkeylab
0
160
言葉の格闘技のススメ~紙とペンと言葉から始める、キャリアの描き方~
progresscicada
2
160
仕様駆動開発の消費期限
watany
20
8.6k
属人化した知識を、 AIが辿れる地図にする
pkshadeck
PRO
1
190
複数の Claude Code が"放置"されてしまう問題をCLI ダッシュボードを自作して解決した話
sumihiro3
1
700
AI時代のPHPer生存戦略 ~「言語、もうなんでもよくない?」に本気で向き合う~
vivion
0
800
リアルな遅延を測る仕様
kota_yata
1
120
AIを紡ぐPMのお話
swdtkuy
0
110
実装をデザインガイドラインに追従させるための取り組み / 260731-dip-mosh-design-system
dachi023
0
3.7k
使いながら育てる Claude Code — 開発フローの1コマンド化 × 繰り返し指摘の自動仕組み化
shiki_kakaku
0
1.8k
改善しないと、タスクが回らない。 “てんこ盛りポジション” を引き継いだ情シスの、入社3ヶ月の業務改善録
krm963
0
270
Go 1.27 における memory allocation の高速化
andpad
0
240
Featured
See All Featured
Building Adaptive Systems
keathley
44
3.2k
Collaborative Software Design: How to facilitate domain modelling decisions
baasie
1
280
How to build a perfect <img>
jonoalderson
1
5.9k
Ten Tips & Tricks for a 🌱 transition
stuffmc
0
170
We Have a Design System, Now What?
morganepeng
55
8.3k
Evolving SEO for Evolving Search Engines
ryanjones
0
260
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
SEO in 2025: How to Prepare for the Future of Search
ipullrank
3
3.8k
Dominate Local Search Results - an insider guide to GBP, reviews, and Local SEO
greggifford
PRO
0
290
Conquering PDFs: document understanding beyond plain text
inesmontani
PRO
4
3k
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.9k
Building Applications with DynamoDB
mza
96
7.2k
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/