ぶろぐめんどくさい

技術系の記事と漫画レビューが入り混じった混沌

オレオレプロトコルについてその中でも一つのさえたやり方(データに改行コードが含まれる場合はどうしたら?)

オレオレプロトコルとは。 HTTPでもなくSSHでもなく独自でくみ上げたプロトコルの事。

本稿では、メッセージの解釈について述べる。

メッセージの送受信はできるものとしよう。 でも、メッセージの種類は判別できない。 そのメッセージが何を意味するのか解釈ができない。 オレオレプロトコルを実装するときにそういったことが課題になると思う。

メッセージを解釈するために、HTTPでは通常複数のデータを\r\nで区切って一つのメッセージとして送受信する。 これをオレオレプロトコルに取り入れるのが手っ取り早い。

データを\r\nで区切って送受信。 うん。普通はこれで問題ないだろう。

でもデータの中に改行コードが含まれていたら? 当然その改行コードでデータが解釈されてしまう。 どうしよう。どうしたら?

そういう場合は、URLエンコードを使おう。 そして、それぞれのデータをエンコードしてしまうのだ。 嬉しいことに、PHPJAVAJavascriptなど多くの言語でエンコード、でコード用の関数が用意されている。 データをエンコードし、それを\r\nで区切ってメッセージを作成。 メッセージの解釈では\r\nで区切ってデータに分解し、それぞれデコードして本当のデータを取り出せばよい。

つまりこういうこと。

request, aiueo \n kakikukeko, abcdefg

これがデータ。

request\r\naiueo%20%5cn%20kakikukeko\r\nabcdefg

これが送受信するメッセージ。\n%20%5cn%20になってるのがわかるはず。

なんだ。結構簡単じゃないか。 オレオレプロトコル。意外と簡単に作れるじゃないか。

本当はデータの意味合いだったり、データの数をメッセージに組み込ませるべきなんだけど、何も考えずに、 先頭データをリクエストやレスポンスとして、後のものを必要となるデータとしてそのまま送ってしまえば手っ取り早い。 オレオレプロトコルだからさ。プロトコルの定義を固める必要ないし。

とにかく、データはエンコードして\r\nで区切りましょうってやり方があるよってことが伝われば、こんなにうれしいことはない。

以上、適当技術記事終わり。