ruannawe@ruannawe:~/projects/golang/gobench$ uname -a
Linux ruannawe 5.15.153.1-microsoft-standard-WSL2 #1 SMP Fri Mar 29 23:14:13 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux
ruannawe@ruannawe:~/projects/golang/gobench$ go run main.go localhost:8080
Uring instance initiated!
Uring instance initiated!
Uring instance initiated!
panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x60 pc=0x51159d]
goroutine 1 [running]:
github.com/y001j/uringnet.(*Ringloop).RunMany(0x0)
/home/ruannawe/go/pkg/mod/github.com/y001j/uringnet@v0.0.3-alpha/ringloop.go:109 +0x3d
main.main()
/home/ruannawe/projects/golang/gobench/main.go:83 +0x145
exit status 2
ruannawe@ruannawe:~/projects/golang/gobench$ uname -a
Linux ruannawe 5.15.153.1-microsoft-standard-WSL2 #1 SMP Fri Mar 29 23:14:13 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux
package main
import (
"bytes"
"os"
"sync"
"time"
uringnet "github.com/y001j/uringnet"
socket "github.com/y001j/uringnet/sockets"
)
type testServer struct {
uringnet.BuiltinEventEngine
testloop *uringnet.Ringloop
//ring *uring_net.URingNet
addr string
multicore bool
}
type httpCodec struct {
delimiter []byte
buf []byte
}
func appendResponse(hc *[]byte) {
*hc = append(*hc, "HTTP/1.1 200 OK\r\nServer: uringNet\r\nContent-Type: text/plain\r\nDate: "...)
*hc = time.Now().AppendFormat(*hc, "Mon, 02 Jan 2006 15:04:05 GMT")
*hc = append(*hc, "\r\nContent-Length: 12\r\n\r\nHello World!"...)
}
var (
errMsg = "Internal Server Error"
errMsgBytes = []byte(errMsg)
)
func (ts *testServer) OnTraffic(data *uringnet.UserData, ringnet *uringnet.URingNet) uringnet.Action {
//将data.Buffer转换为string
//buffer := data.Buffer[:data.BufSize]
buffer := ringnet.ReadBuffer
//tes :=
//fmt.Println("data:", " offset: ", tes, " ", data.BufOffset)
//获取tes中“\r\n\r\n”的数量
count := bytes.Count(buffer, []byte("GET"))
if count == 0 {
//appendResponse(&data.WriteBuf)
//return UringNet.Close
return uringnet.None
} else {
for i := 0; i < count; i++ {
appendResponse(&data.WriteBuf)
}
}
return uringnet.Echo
}
func (ts *testServer) OnWritten(data uringnet.UserData) uringnet.Action {
return uringnet.None
}
func (ts *testServer) OnOpen(data *uringnet.UserData) ([]byte, uringnet.Action) {
ts.SetContext(&httpCodec{delimiter: []byte("\r\n\r\n")})
return nil, uringnet.None
}
func main() {
addr := os.Args[1]
//runtime.GOMAXPROCS(runtime.NumCPU()*2 - 1)
options := socket.SocketOptions{TCPNoDelay: socket.TCPNoDelay, ReusePort: true}
ringNets, _ := uringnet.NewMany(uringnet.NetAddress{socket.Tcp4, addr}, 3200, true, 3, options, &testServer{}) //runtime.NumCPU()
loop := uringnet.SetLoops(ringNets, 4000)
var waitgroup sync.WaitGroup
waitgroup.Add(1)
loop.RunMany()
waitgroup.Wait()
}