go - 从 net.Conn 检索 uri 路径
问题描述
我正在使用其他人的代码,我需要一些帮助。
这里我们有一个 tcp 负载均衡器。我需要的是在我们进行网络拨号之前从这段代码中访问请求 uri 。
我在这里查看了 API 文档: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
}
解决方案
这是不可能的,因为不是每个 TCP 连接都是 HTTP 连接,而且 TCP 协议没有 URI 的概念。许多其他协议都是建立在 TCP 之上的,而了解它们不是该协议的责任。
HTTP 是一种应用层(第 7 层)协议,它使用TCP 传输层(第 4 层)协议。因此,TCP 连接没有 HTTP 的概念,因为较低层协议没有可能构建在它们之上的层的概念。
您可以通过阅读有关OSI 模型的信息来了解更多信息。
推荐阅读
- reactjs - Formik 在页面加载时验证初始值
- mongodb - TypeError:无法读取未定义的属性“市场”(第 23 行)
- python - 如何阅读整条消息而不仅仅是片段
- javascript - firebase auth applyActionCode 方法不会将 emailVerified 变为 true
- javascript - 编写嵌套映射函数
- javascript - 如何使用 JQuery 打印多个文档?
- python - 使用数据框列作为带有 matplotlib 的图形线的颜色
- node.js - 带有 Express 泄漏内存的 Node JS
- javascript - 以下代码行的输出是什么?变量 x = 空;var z = "sp"; 如果 (x==true){ z+=1; } 控制台.log(z); *
- swift - 每当更新变量时如何重新触发函数