У меня есть чат-сервер в 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 удалит наблюдателя после того, как отправил свое сообщение.
Это означает, чтоЯ распределяю, инициализирую, устанавливаю, наблюдаю, снимаю и освобождаю наблюдателя записи каждый раз, когда мне нужно обработать сообщение.Я волнуюсь, что я могу обращаться с этим неправильно и неэффективно.
Каков наилучший метод обработки событий write_callback в libev?
Заранее спасибо.