参加者は +Takashi Yokoyama さん、+Takanobu Hagino さん、私の3名でした。
今回はnetパッケージで、横山さんのサンプル(tcp, udp)にて動作を確認しました。
TCP
Delphiでソケット通信アプリを作成した経験があったので理解しやすかったです。
TCPの流れは、サーバー側はnet.Listen()とListener.Accept()で待ち受け、クライアント側はnet.Dial()で接続し、それぞれ取得したConnインターフェースでデータの入出力を行います。
サーバー側では、受け取ったConnをGoroutineで並列処理するのが"Go通"ですq@w@p
netパッケージのOverviewがシンプルな骨格を提示してくれています。
UDP
用意されたサンプルが動作しない状態だったため、各自で動作するようにもくもくしました。結果的にはTCPのサンプルをコピーしていたため、コネクションレスであるUDPで双方向通信を行う実装になっていたのが原因でした。
UDPの流れは、サーバー側はnet.ResolveUDPAddr()とnet.ListenUDP()で待ち受け、クライアント側はnet.ResolveUDPAddr()とnet.DialUDP()で接続し、それぞれ取得したUDPConnインターフェースでデータの入出力を行います。
サーバー側では、受け取ったUDPConnのReadFrom()/ReadFromUDP()メソッドにてバッファーを用意しておく必要があります。
萩野さんが紹介して下さった「Strange behaviour of golang UDP server」で理解が進みました。
後半
リモートリポジトリー上のサンプルソースが更新され、ローカルのソースを最新化するために、以下のgitコマンドを実行させました。
- git status
- git reset --hard
- git pull
横山さんの「golangcafe」を自分のGitHubにforkするため、以下の手順を実行しました。
- GitHubにサインインする。
- forkしたいGitHub上のリポジトリー(横山さんの「golangcafe」)を開く。
- 画面右上の「Fork」をクリックする。
詳細&技術な内容
横山さんや萩野さんのブログをご覧下さい。
- Golang Cafe #15 - 公式サイト
- Golang Cafe #15を開催しました。 - T.Yokoyamaのブログ
- Golang Cafe #15 まとめ netパッケージ - taknb2nchのメモ
- Golang Cafe #15 - Togetter
[2014.02.07] 横山さんのブログへのリンクを追加しました。
[2014.02.11] 萩野さんのブログへのリンクを追加しました。
[2014.02.11] 萩野さんのブログへのリンクを追加しました。
0 件のコメント:
コメントを投稿