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で始めるWebsocketプログラミング
Search
とんと
August 15, 2020
Technology
0
100
Goで始めるWebsocketプログラミング
Kanazawa.rb Meetup #96
とんと
August 15, 2020
Tweet
Share
More Decks by とんと
See All by とんと
推しの VTuber の公式 Web サイトを作った Part.2
ryuseinomi
0
13
これまでに一番苦労したプロジェクト
ryuseinomi
0
12
推しの VTuber の公式サイトを作った
ryuseinomi
0
140
ぼっちがリモートワークやってみた
ryuseinomi
0
59
Kanazawa.rbを振り返る
ryuseinomi
0
68
もう僕は勤怠を入力しなくても良い
ryuseinomi
0
40
AWS Lambdaでファイルをこねくり回す
ryuseinomi
0
280
iOSアプリをリリースするまで
ryuseinomi
2
280
ベトナムエンジニアと 仲良く仕事を進めるには?
ryuseinomi
3
290
Other Decks in Technology
See All in Technology
オブジェクト指向宗教史
tanakahisateru
13
12k
エンジニアブランディングチームの KPI / KPI's of engineer branding team
chaspy
1
140
オブジェクトのおしゃべり大失敗 メッセージングアンチパターン集 / messaging anti-pattern collection
ytake
0
330
任意コード実行の原理
ffri
0
170
サービス成長と共に肥大化するモノレポ、長くなるCI時間 / As services grow, monorepos get bigger and CI time gets longer
kohbis
5
2.1k
大規模データとの戦い方
knih
1
460
KTC_DBRE.pdf
_awache
0
290
Evolutionary Optimization of Model Merging Recipes
fuyu_quant0
3
520
OCI Data Integration技術情報 / ocidi_technical_jp
oracle4engineer
PRO
1
1.5k
Tohoku.Tech #1 「Cursorを使ったRaspberry Piの開発」by ねこまた
jun2882
0
250
技術広報として2023年度に頑張ったこと / What we did well in FY2023 as a DevRel
pauli
5
460
既存プロセスからの脱却と変化に適応するために必要なこと
cybozuinsideout
PRO
2
170
Featured
See All Featured
The Invisible Customer
myddelton
114
12k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
240
1.2M
Embracing the Ebb and Flow
colly
78
4.1k
Infographics Made Easy
chrislema
237
18k
Designing on Purpose - Digital PM Summit 2013
jponch
109
6.4k
Web Components: a chance to create the future
zenorocha
304
41k
Visualization
eitanlees
135
14k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
19
1.6k
Typedesign – Prime Four
hannesfritz
36
2k
What’s in a name? Adding method to the madness
productmarketing
PRO
14
2.6k
Rails Girls Zürich Keynote
gr2m
91
13k
Java REST API Framework Comparison - PWX 2021
mraible
PRO
18
6.8k
Transcript
Goで始める Websocketプログラミング @27ma4_ton10 github.com/RyuseiNomi Kanazawa.rb Meetup #96 2020/08/15
とんと と申します(`・ω・´) # QA (Selenium, Docker, PHPUnit) # バックエンド (PHP,
Go, AWS) # 社会人3年目 # めめめもみもみ @27ma4_ton10
None
クライアント コンテナ 1 クライアント コンテナ 2 サーバコンテナ chat_network_1 ws://chat_server:8000
クライアントコンテナ 1 サーバーコンテナ クライアントコンテナ 2
クライアント サーバ ・標準入力の受け取り ・サーバへの接続(入室) ・メッセージの送信 ・退室イベントの受取 ・入室エンドポイントの作成 ・リクエストイベント監視 (入室・退室・新規message)
① WebSocket接続の生成 ③ HTTP接続のアップグレード ② エンドポイントへアクセス (入室) ④ クライアントモデルの生成 ⑤
ルームモデルの作成 ⑥ ルームへクライアントの追加 ⑦ イベントの監視 ⑧ メッセージの送信 ⑨ 全てのクライアントへ転送 Client Server ws://chat_server:8000/room
None
[1] chat_client
[2] chat_server [大いに参考(?)] Go言語によるWebアプリケーション開発
① ソケットの生成 ③ HTTP接続のアップグレード ② エンドポイントへアクセス (入室) ④ クライアントモデルの生成 ⑤
ルームモデルの作成 ⑥ ルームへクライアントの追加 ⑦ イベントの監視 ⑧ メッセージの送信 ⑨ 全てのクライアントへ転送 Client Server ws://chat_server:8000/room
None
監視のしやすさ
None
クライアントの追加・削除が容易 (今回で言うと入退室の管理) 最も重要なのは gorutineを用いることで これらのイベントの同時発生を防げる gorutineの性質として、 case節のコードは同時に実行されない。 そのため、 ルーム内のクライアントを保持するMapが クラッシュする心配がない。
入室 退室 転送
Roomモデル Clientモデル ・アクセスのハンドリング ・チャネルの監視 ・空のRoomの生成(setter) ・WebSocketへのメッセー ジの書き込み ・WebSocketからのデータ 読み込み
おしまい