A9-S

実務で役立つTCPクライアントの作り方

all
Short Session (20 min)

netパッケージを用いて比較的容易にTCPクライアントを実装できますが、実務で安定的に使用できるクライアントに仕上げるためにはいくつかポイントがあります。実務で求められる低レイテンシな通信が必要な場合、TCPクライアントで「コネクションプーリング」することは必須です。また瞬断が発生し、一時的に接続できなかった場合を考慮して「リトライ」を考慮する必要がありますし、ブロッキングな通信となり得る場合は「タイムアウト」を実装することが必須です。

netパッケージのAPIを踏まえて、実務で使用できる信頼性の高いTCPクライアントライブラリをGoで設計実装するためのポイントを紹介します。


アプリケーションプロトコルの多くはTCP上の通信として実装されます。HTTPやFTPなど多くのユーザに利用されるプロトコルは net/http といった標準ライブラリや jlaffaye/ftp といったサードパーティのライブラリとして実装されています。一方で業務アプリケーションによっては、業務固有のプロトコルなどが存在します。その1つに工場内に設置されているセンサーなどの物理機器を制御するためのMCプロトコルがあります。私はMCプロトコルを用いてサーバと通信できる go-mcprotocol というTCPクライアントライブラリをGoで実装しました。

独自のTCPクライアントを実装し、実務のプロダクション環境で使えるような品質に仕上げていくには、以下の考慮したいポイントがあります。

  • タイムアウト
  • コネクションプーリング
  • リトライ
  • エラーハンドリング

Goの net パッケージを利用してMCプロトコルを扱うTCPクライアントライブラリを実装した知見から、開発者がGoでTCPクライアントライブラリを作成するときに役に立つ情報を提供したいと考えています。