Skip to content

Commit

Permalink
opt: refactor for buffer in Conn
Browse files Browse the repository at this point in the history
Fixes #122
  • Loading branch information
panjf2000 committed Aug 1, 2020
1 parent 6678eae commit 455c5ae
Show file tree
Hide file tree
Showing 3 changed files with 28 additions and 22 deletions.
11 changes: 3 additions & 8 deletions acceptor_windows.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,6 @@ package gnet
import (
"hash/crc32"
"time"

"github.com/panjf2000/gnet/pool/bytebuffer"
)

// hashCode hashes a string to a unique hashcode.
Expand All @@ -49,11 +47,10 @@ func (svr *server) listenerRun() {
err = e
return
}
buf := bytebuffer.Get()
_, _ = buf.Write(packet[:n])

el := svr.subEventLoopSet.next(hashCode(addr.String()))
el.ch <- &udpIn{newUDPConn(el, svr.ln.lnaddr, addr, buf)}
c := newUDPConn(el, svr.ln.lnaddr, addr)
el.ch <- packUDPConn(c, packet[:n])
} else {
// Accept TCP socket.
conn, e := svr.ln.ln.Accept()
Expand All @@ -73,9 +70,7 @@ func (svr *server) listenerRun() {
el.ch <- &stderr{c, err}
return
}
buf := bytebuffer.Get()
_, _ = buf.Write(packet[:n])
el.ch <- &tcpIn{c, buf}
el.ch <- packTCPConn(c, packet[:n])
}
}()
}
Expand Down
23 changes: 18 additions & 5 deletions connection_windows.go
Original file line number Diff line number Diff line change
Expand Up @@ -38,12 +38,12 @@ type wakeReq struct {
c *stdConn
}

type tcpIn struct {
type tcpConn struct {
c *stdConn
in *bytebuffer.ByteBuffer
bb *bytebuffer.ByteBuffer
}

type udpIn struct {
type udpConn struct {
c *stdConn
}

Expand All @@ -59,6 +59,19 @@ type stdConn struct {
inboundBuffer *ringbuffer.RingBuffer // buffer for data from client
}

func packTCPConn(c *stdConn, buf []byte) *tcpConn {
packet := &tcpConn{c: c}
packet.bb = bytebuffer.Get()
_, _ = packet.bb.Write(buf)
return packet
}

func packUDPConn(c *stdConn, buf []byte) *udpConn {
_, _ = c.buffer.Write(buf)
packet := &udpConn{c: c}
return packet
}

func newTCPConn(conn net.Conn, el *eventloop) *stdConn {
return &stdConn{
conn: conn,
Expand All @@ -78,12 +91,12 @@ func (c *stdConn) releaseTCP() {
c.buffer = nil
}

func newUDPConn(el *eventloop, localAddr, remoteAddr net.Addr, buf *bytebuffer.ByteBuffer) *stdConn {
func newUDPConn(el *eventloop, localAddr, remoteAddr net.Addr) *stdConn {
return &stdConn{
loop: el,
buffer: bytebuffer.Get(),
localAddr: localAddr,
remoteAddr: remoteAddr,
buffer: buf,
}
}

Expand Down
16 changes: 7 additions & 9 deletions eventloop_windows.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,11 +22,11 @@
package gnet

import (
"github.com/panjf2000/gnet/pool/bytebuffer"
"net"
"time"

"github.com/panjf2000/gnet/errors"
"github.com/panjf2000/gnet/pool/bytebuffer"
)

type eventloop struct {
Expand Down Expand Up @@ -61,9 +61,10 @@ func (el *eventloop) loopRun() {
err = v
case *stdConn:
err = el.loopAccept(v)
case *tcpIn:
err = el.loopRead(v)
case *udpIn:
case *tcpConn:
v.c.buffer = v.bb
err = el.loopRead(v.c)
case *udpConn:
err = el.loopReadUDP(v.c)
case *stderr:
err = el.loopError(v.c, v.err)
Expand All @@ -73,7 +74,7 @@ func (el *eventloop) loopRun() {
err = v()
}
if err != nil {
el.svr.logger.Infof("Event-loop(%d) is exiting due to an unexpected error: %v", el.idx, err)
el.svr.logger.Infof("Event-loop(%d) is exiting due to the error: %v", el.idx, err)
break
}
}
Expand All @@ -100,10 +101,7 @@ func (el *eventloop) loopAccept(c *stdConn) error {
return el.handleAction(c, action)
}

func (el *eventloop) loopRead(ti *tcpIn) (err error) {
c := ti.c
c.buffer = ti.in

func (el *eventloop) loopRead(c *stdConn) (err error) {
for inFrame, _ := c.read(); inFrame != nil; inFrame, _ = c.read() {
out, action := el.eventHandler.React(inFrame, c)
if out != nil {
Expand Down

0 comments on commit 455c5ae

Please sign in to comment.