本人主要从事广告后台检索服务的开发,是一个新人,现在想在自己开发的tcp服务器中添加一个超时机制。具体的需求就是因为检索比较耗时,有时候可能会超时,如何设置一个超时时间,让这个检索不会超时呢?超时的话直接返回空数据。
服务的大体框架都是master-workers,每个worker处理一个请求。现在的检索接口有两种,一种是异步(使用libevent,向另一个服务发送请求后就等着它可读),一种是阻塞的,这两种情况如何分别实现?
// 同步,该接口阻塞直到检索结束,如何添加超时机制?
search.GetAds(request)
// 异步
tcp_send(reqeust);
event_add(&read_event, NULL);
// 等待可读的时候返回数据
提前谢谢大家
1.io同步的可以通过setsockopt设置tcp收发包超时时间来做超时。
2.io异步的可以通过设置定时器来实现,定时器回调时,检索还没完成就是请求超时。