登录
首页 >  Golang >  Go问答

什么是http.Hijacker函数的返回值?

来源:stackoverflow

时间:2024-03-10 08:45:28 202浏览 收藏

Golang小白一枚,正在不断学习积累知识,现将学习到的知识记录一下,也是将我的所得分享给大家!而今天这篇文章《什么是http.Hijacker函数的返回值?》带大家来了解一下##content_title##,希望对大家的知识积累有所帮助,从而弥补自己的不足,助力实战开发!


问题内容

go 标准库中定义的 http.hijacker 有一个 hijack() 方法,其签名如下:

Hijack() (net.Conn, *bufio.ReadWriter, error)

前两个返回值的含义是什么? net.conn*bufio.readwriter 都有 write() 方法。两者有什么区别?我应该使用哪一个来向网络发送数据?


解决方案


返回的 net.ConnReadWriter.Reader 的底层 io.Reader,是 ReadWriter.Writer 的底层 io.Writer

ReadWriter.Reader 可以包含从客户端缓冲的数据。 ReadWriter.Writer 是在 Hijack 实现中创建的,可以忽略。

如果应用程序正在从客户端读取,并且客户端数据可能被缓冲,则应用程序必须从 ReadWriter.Reader 读取至少 Reader.Buffered() 字节,然后才能直接从 net.Conn 读取。

如果应用程序要使用 bufio 包来缓冲网络 IO,则应用程序可以通过使用返回的 bufio.Readerbufio.Writer 来减少内存分配次数。

否则应用程序可以直接使用net.Conn进行读写。

如果应用程序确实使用 bufio.Writer 而不是直接写入 net.Conn,则应用程序可能需要通过调用 Writer.Flush 显式刷新缓冲区。

应用程序必须使用 net.Conn 关闭连接并设置截止时间。

在早期版本的 net/http 包中,服务器使用 bufio.Writer 进行网络 IO,并从 Hijack 方法返回该 bufio.Writer。当实现更改为使用不同的缓冲机制时,bufio.Writer 的创建被移至 Hijack 方法。

一些例子:

Server sent events:ReadWriter.Reader 可以被忽略,因为应用程序不会从连接中读取。使用 ReadWriter.Writer 来减少分配。

WebSockets:客户端在发送握手请求后、收到握手响应之前发送数据时出错。鉴于此,数据不应在 ReadWriter.Reader 中缓冲。应用程序可以在使用 Reader.Buffered() != 0 检查意外数据后选择忽略 ReadWriter.Reader。

以上就是《什么是http.Hijacker函数的返回值?》的详细内容,更多关于的资料请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>