web服务中超时机制的实现
本人主要从事广告后台检索服务的开发,是一个新人,现在想在自己开发的tcp服务器中添加一个超时机制。具体的需求就是因为检索比较耗时,有时候可能会超时,如何设置一个超时时间,让这个检索不会超时呢?超时的话直接返回空数据。
服务的大体框架都是master-workers,每个worker处理一个请求。现在的检索接口有两种,一种是异步(使用libevent,向另一个服务发送请求后就等着它可读),一种是阻塞的,这两种情况如何分别实现?
// 同步,该接口阻塞直到检索结束,如何添加超时机制?
search.GetAds(request)
// 异步
tcp_send(reqeust);
event_add(&read_event, NULL);
// 等待可读的时候返回数据
提前谢谢大家
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
1.io同步的可以通过setsockopt设置tcp收发包超时时间来做超时。
2.io异步的可以通过设置定时器来实现,定时器回调时,检索还没完成就是请求超时。
不清楚
libevent
, 最近在看asio相关的东西,针对 @ACb0y 给出的第二个思路尝试给出方法.方法:查询的动作扔到一个线程里面去异步执行去, 当前主线程开一个异步定时器,到了时间查询动作还没有结束,那么直接结束当前线程,这个线程里面声明的查询线程也消失了.
请求动作完成后总有函数要执行把,你可以设定一个状态变量,查询有结果的时候置成1, 定时器到达时间了判断一下就是了;
放弃的话,直接让查询线程托管就可以了.
不一定满足你的需求,我的超时控制代码如下: