you21979の日記

実験ネタとか。仮想化とかnodejsで嵌った所とかおもしろかったところとかいろいろ

ストリーム型通信でプログラマが知らなければいけないこと

基本は3つしかない。

これはバイナリだろうがテキストだろうが同じ。

 

・バッファリング

 一回の受信ではデータが揃わないのでデータが解読できるまで貯めておくこと。

・ディスパッチ

 データを解読してイベント処理を発行すること。

・イベント

 イベント処理を受け取って必要な処理を行うこと。

 

 

■バッファリング

 ストリーム型のデータには切れ目がない

 だから送信時に切れ目を認識できるようにする

 送信時には先頭にパケットデータサイズを入れておく

 データが到着したらパケットデータサイズをまず確認して

 自身が管理している受信可能最大値と比較して超えていたらドロップする

 

 問題がなければパケットデータサイズ分データが貯まるまでバッファリングする

 

■ディスパッチ

 3つの工程がある

 

 ・解析

  パケットデータサイズ分のデータがたまったら解析処理を行う。

  大抵がパケットサイズのあとに何を処理するかの種別データを埋め込んでおき

  種別データを元にイベントを発行する。

 

 ・データ組立

  なんのイベントかわかったらデータの組立処理を行う。

  足りないデータなどがあればそれはおかしなパケット。

 

 ・イベント発行

  イベント処理用の関数に組み立てたデータを入れて呼び出す。

 

■イベント

 ここまで来たらなんの目的の処理かわかるので処理するだけ。

 

 

例:

パケットサイズ;イベント1;データ1;パケットサイズ;イベント2;データ2;パケットサイズ;イベント3;データ3;