dounaidu0204 2015-10-13 07:14
浏览 1821

在Golang中异步完成http.Request

I want to put all arriving http.Requests into a queue and have a separate thread (goroutine?) process these requests and return the appropriate status.

However, the main http request handler directly completes the request even when the http.Request object is sent asynchronously to a goroutine.

Is there a way to control when the http.Request is completed and thereby asynchronously process it?

[Update]

I want to implement a producer-consumer model. The main request handler produces the requests and put them into a queue. A consumer thread (or threads) will read these requests, consume the body of the requests and return them.

  • 写回答

1条回答 默认 最新

  • dragon2025 2015-10-13 15:39
    关注

    http handlers are executed in a different goroutine per request, so if you are simply trying to free up the main serve loop, it's not neccesary.

    If you are looking to serialize processing of requests, you could use a sync.Mutex and have your handler's lock on that. This would have a similar effect in that the requests would be handled one at a time.

    I don't think sync.Mutex is fair, so it may not meet your needs.

    also, if you wanted to be stateful between requests, then this is probably not the right solution.

    As Jorge Marey mentioned, channels would work as well.

    Though, i'd suggest you look at golang.org/x/net/context as it is a package specifically designed for multi-stage processing with timeouts and whatnot.

    my guess is you will end up with a channel that passes structs that look like:

    type Req struct{
       ctx context.Context
       w http.ResponseWriter
       r *http.Request
    }
    
    评论

报告相同问题?

悬赏问题

  • ¥15 无线电能传输系统MATLAB仿真问题
  • ¥50 如何用脚本实现输入法的热键设置
  • ¥20 我想使用一些网络协议或者部分协议也行,主要想实现类似于traceroute的一定步长内的路由拓扑功能
  • ¥30 深度学习,前后端连接
  • ¥15 孟德尔随机化结果不一致
  • ¥15 apm2.8飞控罗盘bad health,加速度计校准失败
  • ¥15 求解O-S方程的特征值问题给出边界层布拉休斯平行流的中性曲线
  • ¥15 谁有desed数据集呀
  • ¥20 手写数字识别运行c仿真时,程序报错错误代码sim211-100
  • ¥15 关于#hadoop#的问题