- Notifications
You must be signed in to change notification settings - Fork0
Package request implements an HTTP request reader.
License
NotificationsYou must be signed in to change notification settings
hslam/request
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
Package request implements an HTTP request reader.
go get github.com/hslam/request
import "github.com/hslam/request"
package mainimport ("bufio""github.com/hslam/mux""github.com/hslam/request""github.com/hslam/response""net""net/http")funcmain() {m:=mux.New()m.HandleFunc("/",func(w http.ResponseWriter,r*http.Request) {w.Write([]byte("Hello World"))})ListenAndServe(":8080",m)}funcListenAndServe(addrstring,handler http.Handler)error {ln,err:=net.Listen("tcp",addr)iferr!=nil {returnerr}for {conn,err:=ln.Accept()iferr!=nil {returnerr}gofunc(conn net.Conn) {reader:=bufio.NewReader(conn)rw:=bufio.NewReadWriter(reader,bufio.NewWriter(conn))varerrerrorvarreq*http.Requestfor {req,err=request.ReadFastRequest(reader)iferr!=nil {break}res:=response.NewResponse(req,conn,rw)handler.ServeHTTP(res,req)res.FinishRequest()request.FreeRequest(req)response.FreeResponse(res)}}(conn)}}
package mainimport ("bufio""github.com/hslam/mux""github.com/hslam/netpoll""github.com/hslam/request""github.com/hslam/response""net""net/http""sync")funcmain() {m:=mux.New()m.HandleFunc("/",func(w http.ResponseWriter,r*http.Request) {w.Write([]byte("Hello World"))})ListenAndServe(":8080",m)}funcListenAndServe(addrstring,handler http.Handler)error {varh=&netpoll.ConnHandler{}typeContextstruct {reader*bufio.Readerrw*bufio.ReadWriterconn net.Connserving sync.Mutex}h.SetUpgrade(func(conn net.Conn) (netpoll.Context,error) {reader:=bufio.NewReader(conn)rw:=bufio.NewReadWriter(reader,bufio.NewWriter(conn))return&Context{reader:reader,conn:conn,rw:rw},nil})h.SetServe(func(context netpoll.Context)error {ctx:=context.(*Context)ctx.serving.Lock()req,err:=request.ReadFastRequest(ctx.reader)iferr!=nil {ctx.serving.Unlock()returnerr}res:=response.NewResponse(req,ctx.conn,ctx.rw)handler.ServeHTTP(res,req)res.FinishRequest()ctx.serving.Unlock()request.FreeRequest(req)response.FreeResponse(res)returnnil})returnnetpoll.ListenAndServe("tcp",addr,h)}
curl -XGEThttp://localhost:8080
Hello World
This package is licensed under a MIT license (Copyright (c) 2020 Meng Huang)
request was written by Meng Huang.
About
Package request implements an HTTP request reader.
Topics
Resources
License
Stars
Watchers
Forks
Packages0
No packages published