Golang - 劫持争论

时间:2016-02-22 20:07:02

标签: http go go-http

Hijack()http.ResponseWriter实例

一起使用时
  

Hijack()(net.Conn,* bufio.ReadWriter,错误)

阅读net.Conn*bufio.ReadWriter

之间有什么区别?

2 个答案:

答案 0 :(得分:4)

net.Conn.Read*bufio.ReadWriter.Read都从同一个连接读取,但后者是缓冲的。标准“net / http”包中的Hijack方法使用已为http请求分配的net.Conn直接返回bufio.ReadWriter中包含的*bufio.Reader

有可能在bufio.Reader中仍然存在缓冲数据,直接从网络连接中读取时可能会错过这些数据。如果要直接使用net.Conn,则应检查是否已存在Reader.Buffered的缓冲数据,并根据所使用的协议进行处理。

通常,您应该更喜欢使用bufio.ReadWriter,因为对于非最佳大小的读写网络来说,它会更有效。

仍然需要net.Conn来处理读取和写入期限,在完成时关闭net.Conn以及任何其他特定于网络的活动。

答案 1 :(得分:-1)

他们的差异是缓冲IO。

net.Conn实现了Read()和Write(),从而实现了io.Reader和io.Writer。这就是为什么bufio可以将它作为缓冲的 ReadWriter包装起来,并以缓冲的方式使用这两种方法进一步实现函数。

如果你只想使用Read()和Write(),你可以坚持使用net.Conn,否则你可以利用缓冲的ReadWriter方法。

请参阅https://golang.org/pkg/io/#Readerhttps://golang.org/pkg/io/#Writer