net/http 如何拿到net.conn?

golang

func IndexHandler(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintln(w, "hello world", r.RemoteAddr)
}
阅读 6.2k
3 个回答

使用http.Hijacker:

package main

import (
    "fmt"
    "log"
    "net/http"
)

func IndexHandler(w http.ResponseWriter, r *http.Request) {
    e, ok := w.(http.Hijacker)
    if !ok {
        return
    }

    conn, _, err := e.Hijack()
    if err != nil {
        ...
    }
    defer conn.Close()
}

func main() {
    http.HandleFunc("/", IndexHandler)
    if err := http.ListenAndServe(":8070", nil); err != nil {
        log.Fatal(err)
    }
}
ln, err := net.Listen("tcp", ":8080")
if err != nil {
    // handle error
}
for {
    conn, err := ln.Accept()
    if err != nil {
        // handle error
    }
    go handleConnection(conn)
}

官方文档有的,可以去看看
https://golang.org/pkg/net/

http.HandleFunc("/", IndexHandler)
        Plugin.serve = &http.Server{
            Addr:           ":8080",
            ReadTimeout:    10 * time.Second,
            WriteTimeout:   10 * time.Second,
            MaxHeaderBytes: 1 << 20,
            ConnState:      ConnStateListener,
        }
        panic(Plugin.serve.ListenAndServe())

ConnState 提供了conn的获取

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题