Skip to content

Commit

Permalink
Update
Browse files Browse the repository at this point in the history
  • Loading branch information
panjf2000 committed Sep 23, 2019
1 parent 6fd483f commit 5bb980e
Show file tree
Hide file tree
Showing 3 changed files with 118 additions and 6 deletions.
14 changes: 8 additions & 6 deletions bench-echo.sh
Original file line number Diff line number Diff line change
Expand Up @@ -27,10 +27,10 @@ function gobench {

if [[ "$1" == "GO-NET" ]]; then
GOMAXPROCS=8 $2 --port $4 &
elif [[ "$1" == "EVIO" ]]; then
GOMAXPROCS=8 $2 --port $4 --loops $5 &
else
elif [[ "$1" == "GNET" ]]; then
GOMAXPROCS=8 $2 --port $4 --multicore $5 &
else
GOMAXPROCS=8 $2 --port $4 --loops $5 &
fi

sleep 1
Expand All @@ -41,6 +41,8 @@ function gobench {
echo ""
}

gobench "GO-NET" bin/net-echo-server net-echo-server/main.go 5001
gobench "EVIO" bin/evio-echo-server evio-echo-server/main.go 5002 -1
gobench "GNET" bin/gnet-echo-server gnet-echo-server/main.go 5003 true
gobench "GO-NET" bin/net-echo-server net-echo-server/main.go 5000
gobench "EVIO" bin/evio-echo-server evio-echo-server/main.go 5001 -1
gobench "EVIOP" bin/eviop-echo-server eviop-echo-server/main.go 5002 -1
gobench "GEV" bin/gev-echo-server gev-echo-server/echo.go 5003 -1
gobench "GNET" bin/gnet-echo-server gnet-echo-server/main.go 5004 true
60 changes: 60 additions & 0 deletions eviop-echo-server/main.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
// Copyright 2019 Xu Xu. All rights reserved.
// Copyright 2017 Joshua J Baker. All rights reserved.

// Use of this source code is governed by an MIT-style
// license that can be found in the LICENSE file.

package main

import (
"flag"
"fmt"
"log"
"strings"
"time"

"github.com/Allenxuxu/eviop"
"github.com/Allenxuxu/ringbuffer"
)

func main() {
var port int
var loops int
var udp bool
var trace bool
var reuseport bool

flag.IntVar(&port, "port", 5000, "server port")
flag.BoolVar(&udp, "udp", false, "listen on udp")
flag.BoolVar(&reuseport, "reuseport", false, "reuseport (SO_REUSEPORT)")
flag.BoolVar(&trace, "trace", false, "print packets to console")
flag.IntVar(&loops, "loops", 0, "num loops")
flag.Parse()

var events eviop.Events
events.NumLoops = loops
events.Serving = func(srv eviop.Server) (action eviop.Action) {
log.Printf("echo server started on port %d (loops: %d)", port, srv.NumLoops)
if reuseport {
log.Printf("reuseport")
}
return
}
events.Data = func(c *eviop.Conn, in *ringbuffer.RingBuffer) (out []byte, action eviop.Action) {
first, end := in.PeekAll()
if trace {
log.Printf("%s", strings.TrimSpace(string(first)+string(end)))
}
out = first
if len(end) > 0 {
out = append(out, end...)
}
in.RetrieveAll()
return
}
scheme := "tcp"
if udp {
scheme = "udp"
}
log.Fatal(eviop.Serve(events, time.Second*10, fmt.Sprintf("%s://:%d?reuseport=%t", scheme, port, reuseport)))
}
50 changes: 50 additions & 0 deletions gev-echo-server/echo.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
package main

import (
"flag"
"strconv"

"github.com/Allenxuxu/gev"
"github.com/Allenxuxu/gev/connection"
"github.com/Allenxuxu/ringbuffer"
)

type example struct{}

func (s *example) OnConnect(c *connection.Connection) {
//log.Println(" OnConnect : ", c.PeerAddr())
}
func (s *example) OnMessage(c *connection.Connection, buffer *ringbuffer.RingBuffer) (out []byte) {
//log.Println("OnMessage")
first, end := buffer.PeekAll()
out = first
if len(end) > 0 {
out = append(out, end...)
}
buffer.RetrieveAll()
return
}

func (s *example) OnClose(c *connection.Connection) {
//log.Println("OnClose")
}

func main() {
handler := new(example)
var port int
var loops int

flag.IntVar(&port, "port", 1833, "server port")
flag.IntVar(&loops, "loops", -1, "num loops")
flag.Parse()

s, err := gev.NewServer(handler,
gev.Network("tcp"),
gev.Address(":"+strconv.Itoa(port)),
gev.NumLoops(loops))
if err != nil {
panic(err)
}

s.Start()
}

0 comments on commit 5bb980e

Please sign in to comment.