サンプルコードは完全ではない

プログラミング言語のインストラクションで、ミニマルコードの掲載例を見ることがある。
そんなコードを使って実際に組んだアプリケーションがうまくいくはずがない。

ソケット通信を例に、実際にハマってしまったことを開示する。

1.データを送る前に、データ長を送ること。
  サーバで受信を待機するときに、バッファをもってデータをプールすることがある。
  ファイル名など、比較的長さの予測がつきそうなデータの場合は、予め固定長のバッファを用意しておいて、溜め込んでおけばよろしい。
  しかし、ファイル本体を送受信する際、どこでストリームを切っていいのか判断に困る。
  予め、ファイルサイズを送信しておけば、大きさに左右されることなく、ピンポイントでストリームを切ることができる。
  ファイルの大きさを通知する。大切である。

2.応答ステータスコードを返すこと。
  連続してデータの送信を行う場合、データの切れ目が判断できない状態でバッファにデータがプールされることになる。
  こうなると、可変長のデータであれば、デリミタなどがなければお手上げになる。
  ①サーバ側で、確実に受信した旨をクライアントに送り返すこと
  ②クライアント側で、応答ステータスの受信が確認されていること
  この二点を確認すれば、同期をとることができる。
  前データの処理が完了していることをもって、次のデータをリクエストするのだから、間違いがない。

以上は、ミニマルには書いてはいないが、とっても重要なエッセンスである。
あまり書いてないノウハウだけれど、ひとつ完結させようとすると、必ずエラーが出る。
設計の中に組み込んでもらいたい。