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-socket.io
Search
Yosuke Furukawa
PRO
August 09, 2014
Programming
5.6k
6
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
go-socket.io
golangのsocket.io実装を使ってパフォーマンスを取ってみた話
Yosuke Furukawa
PRO
August 09, 2014
More Decks by Yosuke Furukawa
See All by Yosuke Furukawa
デザインシステムが必須の時代に
yosuke_furukawa
PRO
2
240
Node.js, Deno, Bun 最新動向とその所感について
yosuke_furukawa
PRO
10
5.3k
Welcome JSConf.jp 2024
yosuke_furukawa
PRO
1
4.8k
tc39 x jsconf.jp Panel Discussion 2024
yosuke_furukawa
PRO
0
350
Removing Corepack
yosuke_furukawa
PRO
9
2k
JavaScript Runtime とはなにか
yosuke_furukawa
PRO
15
3.1k
Strip Types と Storage
yosuke_furukawa
PRO
4
520
Module Harmony について
yosuke_furukawa
PRO
4
1.9k
LTのやり方
yosuke_furukawa
PRO
16
3k
Other Decks in Programming
See All in Programming
Foundation Models frameworkで画像分析
ryodeveloper
1
130
AWS CDK を「作」ってみた 〜フルスクラッチで見えた CDK の裏側〜 / aws-cdk-from-scratch
gotok365
3
470
コーディングルールの鮮度を保ちたい for SRE NEXT 2026 / keep-fresh-go-internal-conventions-sre-next-2026
handlename
0
150
AI駆動開発を妨げる技術的負債の解消アプローチ / ai-refactoring-approach
minodriven
17
9.2k
Haskell/Servantを通してWebミドルウェアを捉え直す
pizzacat83
1
600
アルゴリズムは何を圧縮しているのか ─ Haskell から育った「圧縮代数」というメンタルモデル
naoya
16
3.5k
生成AI導入の「期待外れ」を乗り越える ー 開発フロー改革が目指す、真の組織変革
starfish719
0
1.4k
SREの積み重ねがAI駆動開発のガードレールになった ― 7つの実践/SRE Guardrails The 7
tomoyakitaura
8
4.9k
AI 輔助遺留系統現代化的經驗分享
jame2408
1
1.2k
The Bowling Game- From Imperative to Functional Programming - Part 1
philipschwarz
PRO
0
340
初めてのKubernetes 本番運用でハマった話
oku053
0
130
ルールを書いて終わらせないハーネスエンジニアリング
yug1224
4
1.7k
Featured
See All Featured
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
62k
Un-Boring Meetings
codingconduct
0
350
Building a Scalable Design System with Sketch
lauravandoore
463
34k
Paper Plane (Part 1)
katiecoart
PRO
1
9.7k
Lightning Talk: Beautiful Slides for Beginners
inesmontani
PRO
2
610
Embracing the Ebb and Flow
colly
88
5.1k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
201
75k
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
1
2.1k
The Spectacular Lies of Maps
axbom
PRO
1
870
How to Talk to Developers About Accessibility
jct
2
420
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
23k
What's in a price? How to price your products and services
michaelherold
247
13k
Transcript
HPTPDLFUJP !ZPTVLF@GVSVLBXB
@yosuke_furukawa Node.jsϢʔβʔάϧʔϓද / DeNAॴଐ
NZXPSLT SFBMUJNFJOUFSBDUJWFͳήʔϜΛ࡞Δ ੑೳվળ ϑϩϯτΤϯυͷ։ൃޮΛ্͛Δ͜ͱ
(PMBOHNFFUTTPDLFUJP
TPDLFUJPJT SFBMUJNFMJCSBSZ جຊXFCTPDLFUΛ͏͕ɺXFCTPDLFU͕ܨ͕Β ͳ͍ڥͰMPOHQPMMJOHʹΓସ͑ͯ͘ΕΔ ࠷ۙWʹͳΓɺCJOBSZରԠɺॳظଓߴԽ ͕ߦΘΕͨ
TPDLFUJPW ৄ͘͠ɺ4PDLU*0հΛʜ IUUQZPTVLFGVSVLBXBIBUFOBCMPHDPNFOUSZ
ͦΜͳTPDLFUJPWʹ ࠷ۙHPMBOH࣮͕
HPPHPMMFFHPTPDLFUJP །ҰͷWରԠ͞Ε͍ͯΔ HPMBOHͰॻ͔ΕͨTPDLFUJP
%&.0 JNBHFTUSFBNJOH IUUQ IUUQ
ॻ͍ͨίʔυ // NewServerͰαʔόʔΛinstanceԽ server, _ := socketio.NewServer(nil) // On(“connection”), On(“image”)ͱ͍͏ײ͡
server.On("connection", func(so socketio.Socket) { so.Join("chat") so.On("image", func(msg interface{}) { m := &message{ Id: so.Id(), Blob: msg, } res, _ := json.Marshal(m) so.BroadcastTo("chat", "image", string(res)) }) so.On("disconnection", func() { m := &message{ Id: so.Id(), } res, _ := json.Marshal(m) so.BroadcastTo("chat", "leave", string(res)) }) })
ॻ͍ͨίʔυ // NewServerͰαʔόʔΛinstanceԽ server, _ := socketio.NewServer(nil) // On(“connection”), On(“image”)ͱ͍͏ײ͡
server.On("connection", func(so socketio.Socket) { so.Join("chat") so.On("image", func(msg interface{}) { m := &message{ Id: so.Id(), Blob: msg, } res, _ := json.Marshal(m) so.BroadcastTo("chat", "image", string(res)) }) so.On("disconnection", func() { m := &message{ Id: so.Id(), } res, _ := json.Marshal(m) so.BroadcastTo("chat", "leave", string(res)) }) }) ଓऀશһʹCSPBEDBTU Χϝϥ͔Βͷը૾Λड͚ͯ
ॻ͍ͨίʔυ // NewServerͰαʔόʔΛinstanceԽ server, _ := socketio.NewServer(nil) // On(“connection”), On(“image”)ͱ͍͏ײ͡
server.On("connection", func(so socketio.Socket) { so.Join("chat") so.On("image", func(msg interface{}) { m := &message{ Id: so.Id(), Blob: msg, } res, _ := json.Marshal(m) so.BroadcastTo("chat", "image", string(res)) }) so.On("disconnection", func() { m := &message{ Id: so.Id(), } res, _ := json.Marshal(m) so.BroadcastTo("chat", "leave", string(res)) }) }) ΠϯλϑΣʔεΛ/PEFKTʹدͤͯͯɺ 4PDLFU*0Λͬͨ͜ͱ͕͋ΔਓͳΒ؆୯ʹ͑Δ ଓऀશһʹCSPBEDBTU Χϝϥ͔Βͷը૾Λड͚ͯ
1FSGPSNBODF
݅ .BD#PPL1SP $16()[*OUFM$PSFJ .FNPSZ(# HPTPDLFUJPWTTPDLFUJP ଓ͕Ͱͨ͘͞ΜૹΔ߹ͱ ଓ͕ͨ͘͞Μ͋ͬͯɺ୯ൃͷϦΫΤετ͢Δ߹Ͱ࣮ ߦ
͏গ͠ࡉ͔͍݅ (0."9130$ίΞʹઃఆ /PEFKTͰDMVTUFSΘͣ ͏ͱ3FEJTඞ ཁͩ͠ɺएׯ໘ (PW /PEFW
None
TPDLFUJPͷํ͕ૣ͍
ଓ͕ଟ͍࣌
ʊਓਓਓਓਓਓਓਓਓਓਓਓʊ ʼɹHPTPDLFUJPؼͬͯ͜ͳ͍ɹʻ ʉ:?:?:?:?:?:?:?:?:?:?:ʉ
͓ർΕ༷Ͱͨ͠ɻɻɻ ʊਓਓਓਓਓਓਓਓਓਓਓਓʊ ʼɹHPTPDLFUJPؼͬͯ͜ͳ͍ɹʻ ʉ:?:?:?:?:?:?:?:?:?:?:ʉ
·ͱΊ
·ͱΊ XFCTPDLFUͱMPOHQPMMJOHΛΓସ͑ͯ͘ΕΔϥΠϒϥ ϦͰ͋ΔHPTPDLFUJPΛࢼͯ͠Έͨ ͜ΕΛར༻͢ΔͱΠϯλϥΫςΟϒͳXFCΛHPMBOHͰ ࡞Δ͜ͱՄೳ ͨͩ͠ɺ/PEFKTͷํ͕·ͩੑೳྑ͍ʢࠓޙʹظʣ ಉ࣌ଓΛଟ͘͢Δͱؼͬͯ͜ͳ͍ʜ ଓपΓͰό ά͕͋Γͦ͏
·ͱΊ XFCTPDLFUͱMPOHQPMMJOHΛΓସ͑ͯ͘ΕΔϥΠϒϥ ϦͰ͋ΔHPTPDLFUJPΛࢼͯ͠Έͨ ͜ΕΛར༻͢ΔͱΠϯλϥΫςΟϒͳXFCΛHPMBOHͰ ࡞Δ͜ͱՄೳ ͨͩ͠ɺ/PEFKTͷํ͕·ͩੑೳྑ͍ʢࠓޙʹظʣ ಉ࣌ଓΛଟ͘͢Δͱܨ͕Βͳ͍ʜ ଓपΓͰόά ͕͋Γͦ͏ ͱ͍͏Θ͚Ͱ·ͩ͏ͷਏͦ͏ɻ
QVMMSFRJTTVFૹΖ͏ɻ
͓·͚ HPTPDLFUJPFNJUUFS͍ͬͯ͏ͭ࡞ͬͨɻ ͜ΕHPMBOHͷϓϩηε͔Β/PEFKTͰ࡞ΒΕ ͨTPDLFUJPʹଓ͢Δౕ ϞνṷͰɺಉ࣌ଓ͕ଟ͘ͳΔࣄ͕͋Δ ͳΒTPDLFUJPʹͤͨ΄͏͕ྑͦ͞͏ɻ