https://github.com/hslam/response
Package response implements an HTTP response writer.
https://github.com/hslam/response
chunk chunk-writer chunked go golang http response response-writer
Last synced: about 2 months ago
JSON representation
Package response implements an HTTP response writer.
- Host: GitHub
- URL: https://github.com/hslam/response
- Owner: hslam
- License: mit
- Created: 2020-10-17T15:59:09.000Z (over 4 years ago)
- Default Branch: master
- Last Pushed: 2021-07-01T17:08:35.000Z (almost 4 years ago)
- Last Synced: 2023-07-27T22:12:34.919Z (almost 2 years ago)
- Topics: chunk, chunk-writer, chunked, go, golang, http, response, response-writer
- Language: Go
- Homepage:
- Size: 90.8 KB
- Stars: 0
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# response
[](https://pkg.go.dev/github.com/hslam/response)
[](https://github.com/hslam/response/actions)
[](https://goreportcard.com/report/github.com/hslam/response)
[](https://github.com/hslam/response/blob/master/LICENSE)Package response implements an HTTP response writer.
## Get started
### Install
```
go get github.com/hslam/response
```
### Import
```
import "github.com/hslam/response"
```
### Usage
#### Example
```go
package mainimport (
"bufio"
"github.com/hslam/mux"
"github.com/hslam/response"
"net"
"net/http"
)func main() {
m := mux.New()
m.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
w.Write([]byte("Hello World"))
})
ListenAndServe(":8080", m)
}func ListenAndServe(addr string, handler http.Handler) error {
ln, err := net.Listen("tcp", addr)
if err != nil {
return err
}
for {
conn, err := ln.Accept()
if err != nil {
return err
}
go func(conn net.Conn) {
reader := bufio.NewReader(conn)
rw := bufio.NewReadWriter(reader, bufio.NewWriter(conn))
var err error
var req *http.Request
for {
req, err = http.ReadRequest(reader)
if err != nil {
break
}
res := response.NewResponse(req, conn, rw)
handler.ServeHTTP(res, req)
res.FinishRequest()
response.FreeResponse(res)
}
}(conn)
}
}
```#### Netpoll Example
```go
package mainimport (
"bufio"
"github.com/hslam/mux"
"github.com/hslam/netpoll"
"github.com/hslam/response"
"net"
"net/http"
"sync"
)func main() {
m := mux.New()
m.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
w.Write([]byte("Hello World"))
})
ListenAndServe(":8080", m)
}func ListenAndServe(addr string, handler http.Handler) error {
var h = &netpoll.ConnHandler{}
type Context struct {
reader *bufio.Reader
rw *bufio.ReadWriter
conn net.Conn
serving 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 := http.ReadRequest(ctx.reader)
if err != nil {
ctx.serving.Unlock()
return err
}
res := response.NewResponse(req, ctx.conn, ctx.rw)
handler.ServeHTTP(res, req)
res.FinishRequest()
ctx.serving.Unlock()
response.FreeResponse(res)
return nil
})
return netpoll.ListenAndServe("tcp", addr, h)
}
```curl -XGET http://localhost:8080
```
Hello World
```### License
This package is licensed under a MIT license (Copyright (c) 2020 Meng Huang)### Author
response was written by Meng Huang.