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
 

libevent をスタティックリンクでコンパイルする方法をメモ。

標準の configure オプションで shared, static ともに有効になってる。

なので configure オプションは変更なし。

./configure --prefix=/usr/local/libevent

shared が気になるときは

./configure --prefix=/usr/local/libevent --disable-shared

とすればOK。

make
make install

これでインストールまで完了。

続いてMakefile

main.o の後ろに /usr/local/libevent/lib/libevent.a をひっつける。

環境によっては make 時にエラーが出るっぽい。
CentOS5 で試したときは LIBS に -lrt を追加してあげないとエラーになった。

Makefile

一応 サンプル

2月 132008
 

日本語で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が選択された。

関連:チャットサーバのサンプル