我在 C/Linux 中有一个使用 TCP 套接字的聊天服务器。使用 libev 时,我可以为套接字的读取事件创建一个 ev_io 观察程序。就像是:
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 事件的最佳方法是什么?
提前致谢。