TCPソケットを使用するC/Linuxのチャットサーバーがあります。libevを使用すると、ソケットの読み取りイベント用のev_ioウォッチャーを1回作成できます。何かのようなもの:
ev_io* new_watcher = (ev_io*)malloc(sizeof(ev_io));
//initialize the watcher
ev_init(new_watcher, read_cb);
//set the fd and event to fire on write
ev_io_set(new_watcher, watcher->fd, EV_READ);
//start watching
ev_io_start(loop, new_watcher);
読み取りイベントは、読み取るデータがある場合にのみ発生するため、これは正常に機能します。ただし、書き込むデータがない場合でも常に発生するため、書き込みイベントの処理方法を変える必要があります。この問題を解決するために、read_callbackに、書き込みの準備ができているデータがある場合にのみ書き込みデータのev_ioウォッチャーを作成させます。その後、write_callbackは、メッセージを送信した後にウォッチャーを削除します。
これは、メッセージを処理する必要があるたびに、書き込みウォッチャーの割り当て、初期化、設定、監視、監視解除、および割り当て解除を行っていることを意味します。私はこれを誤って非効率的に扱っているのではないかと心配しています。
libevでwrite_callbackイベントを処理するための最良の方法は何ですか?
前もって感謝します。