[Diary/2017/February]

こんどー / 2017-02-09 (木)

今日

午前中は体調回復のため起きるのを遅くした.

午後は学会関係と学校関係の事務仕事.夜からlibwebsockets周りの教材作り再開.

libwebsocketsは授業用教材のためにやっているので,如何にわかりやすいコメントを入れつつ短いコードでシンプルな例を書くか,ってところに注力するわけだが,libwebsocketsそのものが設計ぶれぶれでコンテキストと本体のインスタンスが一体化してしまってて厄介.

簡単にいえば,オブジェクト指向的にライブラリそのもののインスタンスを作って初期化→各クライアント向けのコンテキストを作って追加していく,というのが正しい流れだと思うのだが,開発者が途中ではたと「これCのライブラリだったわ」ということを思い出したのか,ライブラリのインスタンスとコンテキストが混同し始めて,どっちかに統一すりゃいいのにバラバラという現状.

コールバック(というかイベントハンドラ)はオブジェクトのインスタンスが落ちてくるインタフェースに則って書かれているのに,クリエイトとデストロイはコンテキストで行う,という,ふつー逆だろ的な.

しかしそれでも,Cとしてはヒジョーに短いコードで,WS通信のみのサーバプログラムが書けるので,libwebsocketsというライブラリは優秀だと思う.

他の言語は全てWebフレームワークと一体化しているものばかりで,シンプルなWSのみのサーバを作るためだけに大量のライブラリをインストールしなきゃいけないし,書かなければいけないコードも膨大になるのだが(例えばJavaだと基本的にJavaEEでしか動かない),libwebsocketsはホントにWebSocketプロトコロルのみの部分が書けるため,Cのコードの長さを以ってしても全体が短く仕上がる.