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
140
Goで始めるWebsocketプログラミング
Kanazawa.rb Meetup #96
とんと
August 15, 2020
Tweet
Share
More Decks by とんと
See All by とんと
推しの VTuber の公式 Web サイトを作った Part.2
ryuseinomi
0
24
これまでに一番苦労したプロジェクト
ryuseinomi
0
19
推しの VTuber の公式サイトを作った
ryuseinomi
0
160
ぼっちがリモートワークやってみた
ryuseinomi
0
78
Kanazawa.rbを振り返る
ryuseinomi
0
89
もう僕は勤怠を入力しなくても良い
ryuseinomi
0
40
AWS Lambdaでファイルをこねくり回す
ryuseinomi
0
410
iOSアプリをリリースするまで
ryuseinomi
2
390
ベトナムエンジニアと 仲良く仕事を進めるには?
ryuseinomi
3
310
Other Decks in Technology
See All in Technology
.NET 9 のパフォーマンス改善
nenonaninu
0
900
サイバー攻撃を想定したセキュリティガイドライン 策定とASM及びCNAPPの活用方法
syoshie
3
1.3k
C++26 エラー性動作
faithandbrave
2
730
20241220_S3 tablesの使い方を検証してみた
handy
4
400
プロダクト開発を加速させるためのQA文化の築き方 / How to build QA culture to accelerate product development
mii3king
1
260
ゼロから創る横断SREチーム 挑戦と進化の軌跡
rvirus0817
2
270
なぜCodeceptJSを選んだか
goataka
0
160
非機能品質を作り込むための実践アーキテクチャ
knih
5
1.3k
開発生産性向上! 育成を「改善」と捉えるエンジニア育成戦略
shoota
2
350
生成AIのガバナンスの全体像と現実解
fnifni
1
190
KubeCon NA 2024 Recap: How to Move from Ingress to Gateway API with Minimal Hassle
ysakotch
0
200
バクラクのドキュメント解析技術と実データにおける課題 / layerx-ccc-winter-2024
shimacos
2
1.1k
Featured
See All Featured
The Straight Up "How To Draw Better" Workshop
denniskardys
232
140k
Measuring & Analyzing Core Web Vitals
bluesmoon
4
170
jQuery: Nuts, Bolts and Bling
dougneiner
61
7.5k
Agile that works and the tools we love
rasmusluckow
328
21k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
44
6.9k
What's in a price? How to price your products and services
michaelherold
243
12k
Making the Leap to Tech Lead
cromwellryan
133
9k
Docker and Python
trallard
42
3.1k
Code Reviewing Like a Champion
maltzj
520
39k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
28
900
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
26
1.9k
Reflections from 52 weeks, 52 projects
jeffersonlam
347
20k
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からのデータ 読み込み
おしまい