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
160
Goで始めるWebsocketプログラミング
Kanazawa.rb Meetup #96
嘉音とんと
August 15, 2020
Tweet
Share
More Decks by 嘉音とんと
See All by 嘉音とんと
CSSの歩き方
kanon_tonto
0
51
推しの VTuber の公式 Web サイトを作った Part.2
kanon_tonto
0
26
これまでに一番苦労したプロジェクト
kanon_tonto
0
23
推しの VTuber の公式サイトを作った
kanon_tonto
0
170
ぼっちがリモートワークやってみた
kanon_tonto
0
89
Kanazawa.rbを振り返る
kanon_tonto
0
100
もう僕は勤怠を入力しなくても良い
kanon_tonto
0
46
AWS Lambdaでファイルをこねくり回す
kanon_tonto
0
430
iOSアプリをリリースするまで
kanon_tonto
2
410
Other Decks in Technology
See All in Technology
VCC 2025 Write-up
bata_24
0
150
神回のメカニズムと再現方法/Mechanisms and Playbook for Kamikai scrumat2025
moriyuya
4
300
動画データのポテンシャルを引き出す! Databricks と AI活用への奮闘記(現在進行形)
databricksjapan
0
130
データエンジニアがこの先生きのこるには...?
10xinc
0
430
Findy Team+のSOC2取得までの道のり
rvirus0817
0
290
PythonとLLMで挑む、 4コマ漫画の構造化データ化
esuji5
1
130
SwiftUIのGeometryReaderとScrollViewを基礎から応用まで学び直す:設計と活用事例
fumiyasac0921
0
120
Modern_Data_Stack最新動向クイズ_買収_AI_激動の2025年_.pdf
sagara
0
180
Trust as Infrastructure
bcantrill
0
290
BtoBプロダクト開発の深層
16bitidol
0
150
AIが書いたコードをAIが検証する!自律的なモバイルアプリ開発の実現
henteko
1
290
DataOpsNight#8_Terragruntを用いたスケーラブルなSnowflakeインフラ管理
roki18d
1
320
Featured
See All Featured
Reflections from 52 weeks, 52 projects
jeffersonlam
352
21k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
252
21k
Balancing Empowerment & Direction
lara
4
670
We Have a Design System, Now What?
morganepeng
53
7.8k
Code Review Best Practice
trishagee
72
19k
Gamification - CAS2011
davidbonilla
81
5.5k
Mobile First: as difficult as doing things right
swwweet
224
9.9k
Writing Fast Ruby
sferik
629
62k
Music & Morning Musume
bryan
46
6.8k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
1.6k
GraphQLとの向き合い方2022年版
quramy
49
14k
Visualization
eitanlees
148
16k
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からのデータ 読み込み
おしまい