如何发送给客户端响应之后程序继续执行

写PHP的时候遇到一个问题

如何在把响应发送给客户端之后,继续执行后续任务?

在stackoverflow上找到解决方案,如下

https://stackoverflow.com/questions/15273570/continue-processing-php-after-sending-http-response

想知道,如何在Golang中实现这种需求,google了一会没能找到,汗... 求助,能赐几行代码更好,多谢:)

已邀请:

h12 - https://h12.io/about

赞同来自: root666

func serveHTTP(w http.ResponseWriter, r *http.Request) {
    // w.WriteHeader(......)
    // w.Write(......)
    go func() {
     // 继续执行后续任务
    }()
}

pathbox - https://pathbox.github.io/

赞同来自: lmw

只要不return, 都可以继续执行知道最后吧?

yet

赞同来自:

其实这种最好的方式是采用消息的方式处理, 程序处理 -> 发送消息并返回信息给客户端 -> 程序接收消息并处理. 采用消息的好处:

  1. 异步
  2. 失败的处理更灵活
  3. 并发量限制等

KCrazy

赞同来自:

这样试下

func handler(w http.ResponseWriter, r *http.Request){
    //响应
    w.Write(".......")
    if f, ok := w.(http.Flusher); ok {
          f.Flush()
    }
    //...继续代码
    //xxxxxxxxxxxxxx
}

marks_gui

赞同来自:

如果是php的话,用队列来实现这个功能! golang 则比较简单,直接开一个协程,在携程里面跑异步的代码即可!

lmw - hello world

赞同来自:

伪需求 不需要特殊处理 响应下面不return就会继续执行

lmw - hello world

赞同来自:

package main

import (
    "fmt"
    "net/http"
)

func IndexHandler(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintf(w, "hello world")
    fmt.Println("=======响应之后======")
}

func main() {
    http.HandleFunc("/", IndexHandler)
    http.ListenAndServe(":8080", nil)
}

要回复问题请先登录注册