代码之家  ›  专栏  ›  技术社区  ›  somejkuser

从net.Conn检索uri路径

  •  0
  • somejkuser  · 技术社区  · 7 年前

    我正在使用别人的代码,我需要一些帮助。

    在我们上网之前 .

    https://golang.org/pkg/net/ 但在调查中找不到任何相关方法 net.Conn

    func copy(wc io.WriteCloser, r io.Reader) {
        defer wc.Close()
        io.Copy(wc, r)    
    }
    
    func handleConnection(us net.Conn, backend BA.Backend) {
        if backend == nil {
            log.Printf("no backend available for connection from %s", us.RemoteAddr())
            us.Close()
            return
        }           
    
        ip:=us.RemoteAddr().String()
        parts:=strings.Split(ip,":")
        ip=parts[0]
    
        //w := bufio.NewWriter(us)
        //w.WriteString(+"\n")
        //w.Flush()    
        ds, err := net.Dial("tcp", backend.String())
        if err != nil {
            log.Printf("failed to dial %s: %s", backend, err)
            us.Close()
            return
        }
    
        // Ignore errors
        go copy(ds, us)
        go copy(us, ds)
    }
    
    func tcpBalance(bind string, backends BA.Backends) error {    
        log.Println("using tcp balancing")
        ln, err := net.Listen("tcp", bind)
        if err != nil {
            return fmt.Errorf("failed to bind: %s", err)
        }
    
        log.Printf("listening on %s, balancing %d backends", bind, backends.Len())
    
        for {
            conn, err := ln.Accept()
            if err != nil {
                log.Printf("failed to accept: %s", err)
                continue
            }        
            go handleConnection(conn, backends.Choose())
        }
    
        return err
    }
    
    1 回复  |  直到 7 年前
        1
  •  2
  •   maerics    7 年前

    这是不可能的,因为不是每个TCP连接都是HTTP连接,并且TCP协议没有uri的概念。许多其他协议是建立在TCP之上的,了解它们并不是协议的责任。

    HTTP是一种 Application Layer (layer 7) protocol 使用 TCP Transport Layer (layer 4) protocol

    你可以通过阅读关于 OSI model .