基于quic-go/http3以及go-restful实现REST客户端/服务端示例

客户端代码:

package main

import (
	"bytes"
	"crypto/tls"
	"fmt"
	"github.com/quic-go/quic-go"
	"github.com/quic-go/quic-go/http3"
	"k8s.io/klog/v2"
	"net/http"
)

func main() {
	cert, err := tls.LoadX509KeyPair("auth/server.crt", "auth/server.key")
	if err != nil {
		klog.Infof("load tls err: %v", err)
		return
	}

	roundTripper := &http3.RoundTripper{
		TLSClientConfig: &tls.Config{Certificates: []tls.Certificate{cert},
			InsecureSkipVerify: true}, // set a TLS client config, if desired
		QUICConfig: &quic.Config{}, // QUIC connection options
	}
	defer roundTripper.Close()
	client := &http.Client{
		Transport: roundTripper,
	}

	payload := bytes.NewBufferString(`{"key": "val"}`)
	resp, err := client.Post("https://10.11.140.68:9000/hello", "application/json", payload)
	fmt.Printf("%#v, %#v", resp, err)
}

服务端代码:

func main() {
	container := InitRESTServer()
	server := http3.Server{
		Handler: container,
		Addr:    "10.11.140.68:9000",
		QUICConfig: &quic.Config{
			Tracer: qlog.DefaultConnectionTracer,
		},
	}
	fmt.Println(server.ListenAndServeTLS("auth/server.crt", "auth/server.key"))
}

func InitRESTServer() *restful.Container {

	serverContainer := restful.NewContainer()
	ws := new(restful.WebService)
	ws.Path("/").
		Consumes(restful.MIME_JSON).
		Produces(restful.MIME_JSON)

	ws.Route(ws.POST("/hello").To(HandleHello))
	// ws.Route(ws.POST("/keepalive/remote").To(RemoteKeepAlive))
	return serverContainer.Add(ws)
}

func HandleHello(req *restful.Request, resp *restful.Response) {
	klog.Infof("request is: %#v", req)
	resp.WriteErrorString(http.StatusTeapot, fmt.Sprintf("This is teapot speaking~"))
}

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

PenguinLeee

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值