Golang - 劫持参数
Golang - Hijack Arguments
将 Hijack() 与 http.ResponseWriter
实例一起使用时
Hijack() (net.Conn, *bufio.ReadWriter, error)
阅读 net.Conn
和 *bufio.ReadWriter
有什么区别?
它们的区别在于缓冲IO。
net.Conn 实现 Read() 和 Write() 从而实现 io.Reader 和 io.Writer。这就是为什么 bufio 可以将其包装为 buffered ReadWriter 并进一步以缓冲方式使用这两种方法在顶部实现功能。
如果您只想使用 Read() 和 Write(),您可以坚持使用 net.Conn,否则您可以利用缓冲的 ReadWriter 方法。
见https://golang.org/pkg/io/#Reader and https://golang.org/pkg/io/#Writer
net.Conn.Read
和 *bufio.ReadWriter.Read
都从同一个连接读取,但后者被缓冲。标准 "net/http" 中的 Hijack
方法直接将 returns 包装在 bufio.ReadWriter
中的 net.Conn
,使用已经分配给的相同 *bufio.Reader
http 请求。
bufio.Reader
中可能仍有缓冲的数据,您在直接从网络连接读取时可能会错过这些数据。如果你想直接使用net.Conn
,你应该检查Reader.Buffered
是否已经有缓冲数据,并根据使用的协议处理。
一般来说,您应该更喜欢使用 bufio.ReadWriter
,因为对于非最佳大小的网络读取和写入,它会更有效。
仍然需要 net.Conn
来处理读取和写入截止日期、完成后关闭 net.Conn
以及任何其他特定于网络的活动。
将 Hijack() 与 http.ResponseWriter
实例一起使用时
Hijack() (net.Conn, *bufio.ReadWriter, error)
阅读 net.Conn
和 *bufio.ReadWriter
有什么区别?
它们的区别在于缓冲IO。
net.Conn 实现 Read() 和 Write() 从而实现 io.Reader 和 io.Writer。这就是为什么 bufio 可以将其包装为 buffered ReadWriter 并进一步以缓冲方式使用这两种方法在顶部实现功能。
如果您只想使用 Read() 和 Write(),您可以坚持使用 net.Conn,否则您可以利用缓冲的 ReadWriter 方法。
见https://golang.org/pkg/io/#Reader and https://golang.org/pkg/io/#Writer
net.Conn.Read
和 *bufio.ReadWriter.Read
都从同一个连接读取,但后者被缓冲。标准 "net/http" 中的 Hijack
方法直接将 returns 包装在 bufio.ReadWriter
中的 net.Conn
,使用已经分配给的相同 *bufio.Reader
http 请求。
bufio.Reader
中可能仍有缓冲的数据,您在直接从网络连接读取时可能会错过这些数据。如果你想直接使用net.Conn
,你应该检查Reader.Buffered
是否已经有缓冲数据,并根据使用的协议处理。
一般来说,您应该更喜欢使用 bufio.ReadWriter
,因为对于非最佳大小的网络读取和写入,它会更有效。
仍然需要 net.Conn
来处理读取和写入截止日期、完成后关闭 net.Conn
以及任何其他特定于网络的活动。