默认情况下连接的关闭是Server来控制的,但是HttpServer提供了一个Hijacker的接口可以让开发者来接管连接状态的管理,如果一个连接被Hijack了,那么连接的关闭需要由开发者自己管理。
下面我们通过一个示例来演示下:
package main
import (
"net/http"
)
func sayHelloHijacker(w http.ResponseWriter, r *http.Request) {
//5. 类型转换,转换为Hijacker接口
hijacker, _ := w.(http.Hijacker)
//6. 获取连接和ReadWriter
conn, buf, _ := hijacker.Hijack()
buf.WriteString("hello world")
buf.Flush()
//7.关闭连接
defer conn.Close()
}
func sayHello(w http.ResponseWriter, r *http.Request) {
w.Write([]byte("hello world"))
}
func main() {
//1. 创建http请求处理器,并注册path与处理器
handler := http.NewServeMux()
//2.handler执行超时
handler.HandleFunc("/hello", sayHello)
handler.HandleFunc("/hijacker", sayHelloHijacker)
//3. 创建httpserver
server := &http.Server{
Addr: ":8080",
Handler: handler,