Slide 1

Slide 1 text

WebSocket Connection Proxy kuiperbeltͷ ϓϥάΠϯػߏͷ࣮૷ @mackee_w a.k.a macopy

Slide 2

Slide 2 text

• twitter:@mackee_w • github:mackee • ໘ന๏ਓΧϠοΫ • ιʔγϟϧήʔϜͷ ։ൃͱӡ༻PG • Perl / Go ୭ʁ

Slide 3

Slide 3 text

ॻ͍ͨύοέʔδ • github.com/mackee/go-sqlla • code generate͢Δײ͡ͷΫΤϦϏϧμ

Slide 4

Slide 4 text

ॻ͍ͨύοέʔδ • github.com/mackee/go-sqlla • code generate͢Δײ͡ͷΫΤϦϏϧμ

Slide 5

Slide 5 text

ॻ͍ͨύοέʔδ • github.com/mackee/go-genddl • struct͔ΒSQLͷDDLΛ࡞Δ܅

Slide 6

Slide 6 text

ॻ͍ͨύοέʔδ • github.com/mackee/go-genddl • struct͔ΒSQLͷDDLΛ࡞Δ܅

Slide 7

Slide 7 text

go generateେ޷͖ਓؒͰ͢

Slide 8

Slide 8 text

࠷ۙ(࢓ࣄͰ)΍ͬͨ͜ͱ https://speakerdeck.com/mackee/perl-plus-goshi-yun-yong-falsehua

Slide 9

Slide 9 text

PerlͷҰຕΞϓϦ͔Β Go΁੾Γग़͠ • ෳ਺DBΛԣஅ͢ΔΑ͏ͳ৘ใΛ࣋ͬͨAPI αʔόΛGoͰॻ͍ͯ੾Γग़͢ • Ϣʔβొ࿥ɺIDൃ൪ɺιʔγϟϧάϥϑetc… • ιʔγϟϧήʔϜΛશ෦GoͰॻ͘ͷ͸·ͩͭ Β͍ͱ͍͏ҹ৅

Slide 10

Slide 10 text

ιʔγϟϧήʔϜͷ ػೳͷଟ͞

Slide 11

Slide 11 text

ιʔγϟϧήʔϜͷػೳͷଟ͞ • ϑϨϯυొ࿥ • ෢ثతͳϠπͷ૷උɺ߹੒ɺਐԽ • Ψνϟ • ҭ੒ཁૉ(͢͝Ζ͘) • GvG(ࢼ߹)

Slide 12

Slide 12 text

ιʔγϟϧήʔϜͷػೳͷଟ͞ • ϑϨϯυొ࿥ • ෢ثతͳϠπͷ૷උɺ߹੒ɺਐԽ • Ψνϟ • ҭ੒ཁૉ(͢͝Ζ͘) • GvG(ࢼ߹) • ɾɾɾ͜ΕΒΛϦΞϧλΠϜͰɹˡNew!

Slide 13

Slide 13 text

ϦΞϧλΠϜʁʁʁʁ

Slide 14

Slide 14 text

࠷ۙͷτϨϯυͱͯ͠ͷ ϦΞϧλΠϜ • GvGͱ͔PvPͱ͔ͷରਓઓ΍ڠྗϓϨΠ͕ग़ͯ ͖ͯɺଞਓͷεϚϗͰߦͬͨߦಈΛʮଈ࠲ʹʯ ࣗ෼ͷͱ͜Ζʹ൓өͤ͞Δඞཁ͕͋Δ • ϦΞϧλΠϜײͱ͍͏ͷ͸ɺ੝Γ্͕ΓΛԋ शͭͨ͠Γਓͱ΍͍ͬͯΔײΛग़͢ͷʹඞཁ ͳཁૉʹͳΓͭͭ͋Δ

Slide 15

Slide 15 text

ϦΞϧλΠϜͷ࣮ݱํ๏ • ྫ͑͹ಠࣗϓϩτίϧΛੜιέοτͰ͠Ό΂ΔήʔϜαʔόΛ C++͋ͨΓͰॻ͘ • ήʔϜαʔόͱ͸ϦΞϧλΠϜ෦෼ʹඞཁͳήʔϜͷཁૉ෦෼ (εΩϧൃಈʂͱ͔)΋࣮૷ͯ͠DBʹॻ͖ࠐΜͩΓͱ͔ • Ή͠ΖDBհͣ͞ʹͳΜ͔಄͍͍ײ͡Ͱԣͱ΍ΓऔΓͨ͠Γͱ ͔ • HTTP͠Ό΂Δαʔό͔͠ॻ͍͖͍ͯͯͳ͍ͷʹͦΜͳεΩϧ͸ ͳ͔ͬͨɾɾɾ

Slide 16

Slide 16 text

ιέοτͱ͔Α͘Θ͔Μͳ͍ ͷͰ Webඪ४ʹ৐͔ͬΓ·͢ ↓ WebSocket

Slide 17

Slide 17 text

PerlͰWebSocketΛ͠Ό΂…… WSͰͭͳ͙

Slide 18

Slide 18 text

PerlͰWebSocketΛ͠Ό΂…… ͝ʹΐ͝ʹΐܭࢉ…

Slide 19

Slide 19 text

PerlͰWebSocketΛ͠Ό΂…… DBʹॻ͖ࠐΈத…

Slide 20

Slide 20 text

PerlͰWebSocketΛ͠Ό΂…… DBʹॻ͖ࠐΈத… WSͰͭͳ͙…

Slide 21

Slide 21 text

PerlͰWebSocketΛ͠Ό΂…… DBʹॻ͖ࠐΈத… WSͰͭͳ͙… ͪΐͬͱࠓ࢓ࣄதͳΜͰ…

Slide 22

Slide 22 text

PerlͰWebSocketΛ͠Ό΂…… DBʹॻ͖ࠐΈத… ͑ͬ ͪΐͬͱࠓ࢓ࣄதͳΜͰ…

Slide 23

Slide 23 text

΍ͬͺΓC++Ͱ……

Slide 24

Slide 24 text

ͦ͏ͩWSΛ͠Ό΂ͬͯ ͭͳ͗ͬͺʹͯ͘͠ΕΔ ઐ༻ͷαʔόΛॻ͜͏ ↓ kuiperbelt

Slide 25

Slide 25 text

͍͍ͩͨ͜Μͳײ͡ • client͕kuiperbeltʹWSͰͭͳ͛ΔͱޙΖͷ PerlʹೝূϦΫΤετΛ౤͛ͯ200ͩͬͨΒ WS։࢝ • ޙΖͷPerl͔ΒkuiperbeltʹHTTPͰϦΫΤε τΛ౤͛ΔͱWSͰϝοηʔδΛ഑ૹ͢Δ

Slide 26

Slide 26 text

͍͍ͩͨҎԼͷهࣄʹ http://qiita.com/mackee_w/items/b6036d132888caaf5f98

Slide 27

Slide 27 text

ΫϥελԽͱ ϓϥάΠϯͷ࿩

Slide 28

Slide 28 text

ݱঢ়ͷkuiperbeltͷ෼ࢄͷ࢓૊ Έ • Ұ൪ॳΊͷೝূϦΫΤετͷ࣌ʹϔομʹࣗ෼ͷϗ ετ໊Λ෇͚ͯૹ͍ͬͯΔ • ͜ͷΫϥΠΞϯτʹૹΓ͍ͨͱ͖͸ͦͷϗετ໊Λ ࢖͍ͬͯͩ͘͞ͱͳΔ(redisͱ͔ʹอଘ͠ͱ͍ͯͶ) • ͜ΕͩͱͲͷαʔόʹͲͷΫϥΠΞϯτ͕ͿΒԼ͕ͬ ͍ͯΔ͔ΛόοΫΤϯυଆ͕ҙࣝ͠ͳ͍ͱ͍͚ͳ͍

Slide 29

Slide 29 text

ݱঢ়ͷkuiperbeltͷ෼ࢄͷ࢓ ૊Έ LVJQFSCFMU CBDLFOE

Slide 30

Slide 30 text

LVJQFSCFMU CBDLFOE ೝূͷͱ͖ʹ ͭͳ͕ͬͨkuiperbeltͷϗετΛ௨஌͢Δ ઀ଓ࣌

Slide 31

Slide 31 text

CBDLFOE LVJQFSCFMU ηογϣϯΩʔͱϗετ໊ͷϖΞΛอଘ ઀ଓ࣌

Slide 32

Slide 32 text

CBDLFOE LVJQFSCFMU ηογϣϯΩʔ͔Βϗετ໊ΛऔΔ ૹ৴࣌

Slide 33

Slide 33 text

CBDLFOE ϗετ໊Ͱͭͳ͕͍ͬͯΔkuiperbeltΛࢦ໊ͯ͠ ௨৴͢Δ ૹ৴࣌ LVJQFSCFMU

Slide 34

Slide 34 text

όοΫΤϯυ͕ Ͳͷαʔόʹͭͳ͕͍ͬͯΔ ͔Ͳ͏͔Λߟྀ͢Δඞཁ͕͋ Δ

Slide 35

Slide 35 text

ͦͷଞϦΞϧλΠϜήʔϜαʔ όͷྫ • ʮ͍ͭ͜ʹͭͳ͛ʂʯ͍ͬͯ͏αʔόΛࣄલ ʹAPIͰࢦఆ͍ͯͦͭ͠ʹܨ͍Ͱ΋Β͏ • ϝϦοτ: ภΓΛίϯτϩʔϧ • Ͳ͜ʹͭͳ͍Ͱ΋Ͳ͜ʹૹ৴ͯ͠΋Α͠ͳʹ ϝοηʔδΛૹͬͯ͘ΕΔ

Slide 36

Slide 36 text

ͦͷଞϦΞϧλΠϜήʔϜαʔ όͷྫ • ʮ͍ͭ͜ʹͭͳ͛ʂʯ͍ͬͯ͏αʔόΛࣄલ ʹAPIͰࢦఆ͍ͯͦͭ͠ʹܨ͍Ͱ΋Β͏ • ϝϦοτ: ภΓΛίϯτϩʔϧ • Ͳ͜ʹͭͳ͍Ͱ΋Ͳ͜ʹૹ৴ͯ͠΋Α͠ͳʹ ϝοηʔδΛૹͬͯ͘ΕΔ ͜ΕΛ΍Γ͍ͨʂʂʂ ↓

Slide 37

Slide 37 text

node.jsͱ͔ͰΑ͋͘Δ΍ͭ ↓ ԣͷҙࢥૄ௨ʹ redis pubsubΛ࢖͏

Slide 38

Slide 38 text

pubsubΛར༻͢Δ • ࣗ෼͕͍࣋ͬͯΔΫϥΠΞϯτͰ͋Ε͹ࠓ· ͰͲ͓Γ͍ͦͭʹϝοηʔδΛ഑ૹ • ͍࣋ͬͯͳ͚Ε͹ΫϥΠΞϯτ͕͋Δ͔Ͳ͏ ͔Λ໰͍߹Θͤͯpublish͢Δ • όοΫΤϯυଆ͸ΫϥΠΞϯτͱαʔόͷ૊ ΛҙࣝͤͣʹϝοηʔδΛ౤͛ΒΕΔ

Slide 39

Slide 39 text

શһʹඞਢͷػೳ͔ʁ • ผʹόοΫΤϯυ͕ؤுΕ͹redisͷυϥΠό ΛೖΕͳͯ͘΋ྑ͍ • redis pubsubҎ֎ʹ΋ಉ༷ͷػೳΛผͷ΍Γ ํͰ࣮ݱͰ͖ΔՄೳੑ͕͋Δ • ແͯ͘΋ಈ͘Α͏ʹ࡞Εͳ͘΋ͳ͍

Slide 40

Slide 40 text

ϓϥάΠϯԽ͢Δ

Slide 41

Slide 41 text

GoͷϓϥάΠϯ • go͸Ϗϧυ࣌ʹશ෦ͷϥΠϒϥϦΛؚΊͯ͠ ·͏ͷͰಈతϩʔυͷ࢓૊Έ͕ͳ͍(1.5ͰϥΠ ϒϥϦԽग़དྷΔͷ͸ೖ͕ͬͨ·ͩෆ҆ఆͱ͍ ͏͔࢖͑Δͷ͔ʁ) • ผͷϓϩηεͱ্ཱͯͪ͛ͯ͠ϓϩηεؒ௨ ৴͢Δͷ͕Ұൠత

Slide 42

Slide 42 text

Goͷແཧ΍ΓϓϥάΠϯԽ .BJO1SPDFTT 1MVHJO1SPDFTT" 1MVHJO1SPDFTT# ϓϩηεؒ௨৴

Slide 43

Slide 43 text

github.com/dullgiulio/pingo • net/rpc + pluginͷϓϩηεؒͰΑ͠ͳʹίω Ϋγϣϯషͬͯ͘ΕΔ + stdout/errͷ౷߹ • جຊతʹnet/rpcͳͷͰͦΕҎ্͸ग़དྷͳ͍ • ίϚϯυʹউखʹΦϓγϣϯ͕ੜ͑Δ

Slide 44

Slide 44 text

࢖͍ํ

Slide 45

Slide 45 text

࢖͍ํ ͭͳ͛ͯ͠·͑͹͋ͱ͸net/rpc

Slide 46

Slide 46 text

࢖͍ํ structΛొ࿥͢Δͱ͍ͦͭͷmethodΛ ݺ΂ΔΑ͏ʹͳΔ

Slide 47

Slide 47 text

࢓ࠐΜͩͱ͜Ζ • ઀ଓ࣌ -> hookͯ͠pluginʹొ࿥ • pluginଆ͸redisͰchannelΛsubscribe • ੾அ࣌ -> hookͯ͠plugin͔Β࡟আ • pluginଆ͸subscribe͍ͯ͠ΔνϟϯωϧΛ࡟ আ

Slide 48

Slide 48 text

࢓ࠐΜͩͱ͜Ζ • ૹ৴࣌ -> ࣗ෼ʹΩʔ͕ͳ͚Ε͹pluginʹ౤͛Δ • plugin͸ͱΓ͋͑ͣpublish͢Δ͕ड͚Δ subscriber͕͍ͳ͚Ε͹ແ͍ΑͬͯΤϥʔΛฦ͢ • ड৴࣌ -> pluginͷsubscribeΛݟ͍ͯΔ΍͕ͭདྷͨ Βϩϯάϙʔϧ(?)͍ͯ͠ΔRPCͰϝοηʔδΛฦ͢ (΋ͬͱ͏·͘΍Γ͍ͨ)

Slide 49

Slide 49 text

demo (͕࣌ؒ͋ͬͨΒ)

Slide 50

Slide 50 text

·ͱΊ • PerlͰ΋DBͱ͔Λ·ͱ΋ʹ࢖͍ͭͭWS஻Γ͍ͨ ͷͰGoͰαʔόॻ͖·ͨ͠ • GoͰແཧ΍ΓPluginॻ͍ͯͦͷαʔόʹredis pub/sub࢖ͬͯෳ਺୆ݐͯΒΕΔΑ͏ʹ͠·ͨ͠ • GoͰ΋ಈతϩʔυग़དྷΔΑ͏ʹͳͬͯ΄͍͠

Slide 51

Slide 51 text

Yokohama\.(go|pm6?)΍Γ·͢ʂ http://yokohamapm.connpass.com/event/26969/