Go + WebsocketでGoroutineをさわる


# はじめに

GoにちょっとだけなれてきたのでGoroutineとかチャネルとかについて勉強しようと思った。

ついでにWebsocketも知らなかったのでまとめて勉強した。

# 作るもの

クライアントとサーバーをWebsocketで通信し、データを送信すると接続しているクライアントすべてにそのメッセージをリアルタイムに表示させるWebApp

インターフェースはjsonで。

# 学んだこと

Websocketはコネクションをもったらずっとデータが送られてくるか監視するが、これをfor{}で実装する。

ゴルーチンはgo func()のようにするだけで生成することができ、これはサブスレッドとしてバックグラウンドで処理をする。

メインスレッドではクライアントからのfor文で永遠にメッセージを待ち受けて、それがきたらチャネルに流し込むというのをシコシコと繰り返しているだけである。

あとは生成しておいたゴルーチンに処理を任せている。こうすることで1スレッドで複数の処理を並行して行うことでできる

(クライアントからのメッセージを常時監視、メッセージがあったら全クライアントにデータを返す、接続を監視する、切断を監視する)

注意点としては、メインスレッドはforによって処理が終了しないことかな。

# 最後に

# refs