server端如何提前结束一个http请求

smoothie · 2015-09-14 07:32:23 · 4207 次点击 · 大约8小时之前 开始浏览    置顶
这是一个创建于 2015-09-14 07:32:23 的主题,其中的信息可能已经有所发展或是发生改变。

在PHP中可以通过fastcgi_finish_request函数提前结束一个请求,这样在结束请求后php脚本可以继续执行其他任务而不需要客户端等待php脚本执行结束,那么类似的功能在使用go开发web server时能不能实现?


有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

4207 次点击  
加入收藏 微博
2 回复  |  直到 2015-09-15 01:35:16
smoothie
smoothie · #1 · 10年之前

找到了一种方法,测试有效,只是不知道会不会有其他问题 http.ResponseWriter实现了http.Hijacker的接口,Hijacker中的Hijack方法返回一个net.Conn对象,利用net.Conn的Close方法关闭连接

func server(w http.ResponseWriter, r *http.Request) {
    //正常的处理逻辑
    //下面关闭连接
    if hj, ok := w.(http.Hijacker); ok {
        conn, _, _ := hj.Hijack()
        conn.Close()
    }
    //连接关闭后的处理,比如记录日志
}
tempvar
tempvar · #2 · 10年之前
smoothiesmoothie #1 回复

找到了一种方法,测试有效,只是不知道会不会有其他问题 http.ResponseWriter实现了http.Hijacker的接口,Hijacker中的Hijack方法返回一个net.Conn对象,利用net.Conn的Close方法关闭连接 ``` func server(w http.ResponseWriter, r *http.Request) { //正常的处理逻辑 //下面关闭连接 if hj, ok := w.(http.Hijacker); ok { conn, _, _ := hj.Hijack() conn.Close() } //连接关闭后的处理,比如记录日志 } ```

应该没问题camlistore中有类似用法

添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传