プログラミング言語のインストラクションで、ミニマルコードの掲載例を見ることがある。
そんなコードを使って実際に組んだアプリケーションがうまくいくはずがない。
ソケット通信を例に、実際にハマってしまったことを開示する。
1.データを送る前に、データ長を送ること。
サーバで受信を待機するときに、バッファをもってデータをプールすることがある。
ファイル名など、比較的長さの予測がつきそうなデータの場合は、予め固定長のバッファを用意しておいて、溜め込んでおけばよろしい。
しかし、ファイル本体を送受信する際、どこでストリームを切っていいのか判断に困る。
予め、ファイルサイズを送信しておけば、大きさに左右されることなく、ピンポイントでストリームを切ることができる。
ファイルの大きさを通知する。大切である。
2.応答ステータスコードを返すこと。
連続してデータの送信を行う場合、データの切れ目が判断できない状態でバッファにデータがプールされることになる。
こうなると、可変長のデータであれば、デリミタなどがなければお手上げになる。
①サーバ側で、確実に受信した旨をクライアントに送り返すこと
②クライアント側で、応答ステータスの受信が確認されていること
この二点を確認すれば、同期をとることができる。
前データの処理が完了していることをもって、次のデータをリクエストするのだから、間違いがない。
以上は、ミニマルには書いてはいないが、とっても重要なエッセンスである。
あまり書いてないノウハウだけれど、ひとつ完結させようとすると、必ずエラーが出る。
設計の中に組み込んでもらいたい。