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
55
推しの VTuber の公式 Web サイトを作った Part.2
kanon_tonto
0
29
これまでに一番苦労したプロジェクト
kanon_tonto
0
25
推しの VTuber の公式サイトを作った
kanon_tonto
0
180
ぼっちがリモートワークやってみた
kanon_tonto
0
91
Kanazawa.rbを振り返る
kanon_tonto
0
110
もう僕は勤怠を入力しなくても良い
kanon_tonto
0
48
AWS Lambdaでファイルをこねくり回す
kanon_tonto
0
430
iOSアプリをリリースするまで
kanon_tonto
2
410
Other Decks in Technology
See All in Technology
【5分でわかる】セーフィー エンジニア向け会社紹介
safie_recruit
0
44k
オンプレとGoogle Cloudを安全に繋ぐための、セキュア通信の勘所
waiwai2111
3
1.1k
Agentic Codingの実践とチームで導入するための工夫
lycorptech_jp
PRO
0
400
作るべきものと向き合う - ecspresso 8年間の開発史から学ぶ技術選定 / 技術選定con findy 2026
fujiwara3
7
2k
マイグレーションガイドに書いてないRiverpod 3移行話
taiju59
0
350
ヘルシーSRE
tk3fftk
2
230
入門DBSC
ynojima
0
130
問い合わせ自動化の技術的挑戦
recruitengineers
PRO
2
130
Windows ネットワークを再確認する
murachiakira
PRO
0
250
ソフトウェアアーキテクトのための意思決定術: Create Decision Readiness—The Real Skill Behind Architectural Decision
snoozer05
PRO
29
8.7k
「ヒットする」+「近い」を同時にかなえるスマートサジェストの作り方.pdf
nakasho
0
100
Oracle Cloud Infrastructure:2026年2月度サービス・アップデート
oracle4engineer
PRO
0
200
Featured
See All Featured
How GitHub (no longer) Works
holman
316
140k
State of Search Keynote: SEO is Dead Long Live SEO
ryanjones
0
150
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.6k
Prompt Engineering for Job Search
mfonobong
0
180
Stewardship and Sustainability of Urban and Community Forests
pwiseman
0
130
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
2.3k
Organizational Design Perspectives: An Ontology of Organizational Design Elements
kimpetersen
PRO
1
620
HU Berlin: Industrial-Strength Natural Language Processing with spaCy and Prodigy
inesmontani
PRO
0
250
Mozcon NYC 2025: Stop Losing SEO Traffic
samtorres
0
170
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
22k
Avoiding the “Bad Training, Faster” Trap in the Age of AI
tmiket
0
96
Lightning talk: Run Django tests with GitHub Actions
sabderemane
0
140
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からのデータ 読み込み
おしまい