By utahta, on 2月 21st, 2009%
libevent でチャットサーバのサンプルを書いたメモ。
チャット送受信のプロトコルを決めるなどして、少しだけまじめ。
libevent-chat-sample-0.1.tar.gz
インストール
事前に libevent が必要。インストールはこちら参照。
$ tar zxvf libevent-chat-sample-0.1.tar.gz
$ cd libevent-chat-sample-0.1
$ ./configure --prefix=/path/to/install --with-libevent=/path/to/libevent
$ make
$ make install
使用方法: サーバ
$ cd /path/to/install/bin
$ ./libserver
使用方法: クライアント
$ cd /path/to/install/bin
$ ./libclient
By utahta, on 3月 1st, 2008%
libevent をスタティックリンクでコンパイルする方法をメモ。
標準の configure オプションで shared, static ともに有効になってる。
なので configure オプションは変更なし。
./configure --prefix=/usr/local/libevent
shared が気になるときは
./configure --prefix=/usr/local/libevent --disable-shared
とすればOK。
これでインストールまで完了。
続いてMakefile
main.o の後ろに /usr/local/libevent/lib/libevent.a をひっつける。
環境によっては make 時にエラーが出るっぽい。
CentOS5 で試したときは LIBS に -lrt を追加してあげないとエラーになった。
Makefile
一応 サンプル
By utahta, on 2月 13th, 2008%
日本語でlibeventの解説をしているページが少ないので、使用方法などメモ。
インストール
http://www.monkey.org/~provos/libevent/
libevent-1.3e.tar.gz をダウンロード。
* 2009-02-22 時点では、libevent-1.4.9-stable.tar.gz が最新。
$ ./configure --prefix=/usr/local/libevent-1.3e
$ make
$ make install
仕組みについて
configure 時に、epoll, select, poll, kqueue などの通知メカニズムの中から、
使用可能かつもっとも scalable なメカニズムを選択する。
configure オプションで通知メカニズムの選択は出来ない。
超簡潔使用法
1.event_init で初期化
2.event_set でイベント設定
3.event_add で設定したイベントを追加
4.event_del で追加したイベントを削除
5.event_dispatch でイベント通知の検知を開始
ソース(例えばlibevent-1.3e)のsampleディレクトリにサンプルソースコードがある。
イベントフラグ関連
EV_READ
読み込みイベント。
EV_WRITE
書き込みイベント
EV_PERSIST
継続フラグ。
指定するとイベント通知を受け取った後も継続してイベント通知を受け取る。
逆に指定しなければ、イベント通知を受け取った後、内部で設定したイベントが削除され、
再度 event_add しない限り、イベント通知を受け取らなくなる。
また、event_add の第2引数に timeval 構造体を渡していると、
EV_PERSISTを追加していても、イベント通知を受け取った後、
内部で設定したイベントが削除される。
timeval 構造体を渡した場合、イベント通知を受け取った後、
もう一度 event_add を行う必要がある。
サーバーサンプル
main.cpp
ごちゃごちゃして見にくくなった orz
せっかくなのでアップップ。
sample.zip
おしまい
ちなみにうちの MacBook さんでは、kqueueが選択された。
関連:チャットサーバのサンプル