go-http server使用hijack接管连接的管理

Go的HTTP服务器默认控制连接关闭,但通过Hijacker接口,开发者可以接管连接状态管理。本文通过示例展示如何使用Hijack方法,接管后需自行关闭连接。Hijack允许在HTTP协议基础上实现如RPC等特定场景,从而避免额外的协议处理。
摘要由CSDN通过智能技术生成

默认情况下连接的关闭是Server来控制的,但是HttpServer提供了一个Hijacker的接口可以让开发者来接管连接状态的管理,如果一个连接被Hijack了,那么连接的关闭需要由开发者自己管理。

下面我们通过一个示例来演示下:

package main


import (
  "net/http"
)


func sayHelloHijacker(w http.ResponseWriter, r *http.Request) {
  //5. 类型转换,转换为Hijacker接口
  hijacker, _ := w.(http.Hijacker)
  //6. 获取连接和ReadWriter
  conn, buf, _ := hijacker.Hijack()
  buf.WriteString("hello world")
  buf.Flush()


  //7.关闭连接
  defer conn.Close()
}


func sayHello(w http.ResponseWriter, r *http.Request) {
  w.Write([]byte("hello world"))
}


func main() {


  //1. 创建http请求处理器,并注册path与处理器
  handler := http.NewServeMux()


  //2.handler执行超时
  handler.HandleFunc("/hello", sayHello)
  handler.HandleFunc("/hijacker", sayHelloHijacker)


  //3. 创建httpserver
  server := &http.Server{
    Addr:    ":8080",
    Handler: handler,
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值