diff --git a/netcard.go b/netcard.go index 8ead5b5..2b7f05e 100644 --- a/netcard.go +++ b/netcard.go @@ -208,7 +208,8 @@ func (nt *NetTunnel) SendFrames(stream gen.FrameService_SendFramesServer) error if err != nil { log.Panic(err) } - nt.writer <- request.GetFrames() + + nt.writer <- Decompress(request.GetFrames()) // frames := Decompress(request.GetFrames()) // if len(frames) > 0 { diff --git a/rpc_client.go b/rpc_client.go index f2b51be..bfca908 100644 --- a/rpc_client.go +++ b/rpc_client.go @@ -1,6 +1,7 @@ package main import ( + "bytes" "context" "log" gen "slimming/proto/gen" @@ -101,7 +102,7 @@ func (cli *RPCClient) run() { // var ticker = time.NewTicker(time.Millisecond * 1) - // buf := bytes.NewBuffer(nil) + buffer := bytes.NewBuffer(nil) for buf := range cli.Frames { // select { @@ -130,9 +131,11 @@ func (cli *RPCClient) run() { // continue // } + Compress(buffer, buf) + // 发到对面的网卡 err = stream.Send(&gen.RequestFrames{ - Frames: buf, + Frames: buffer.Bytes(), }) if err != nil { log.Panic(err) diff --git a/utils.go b/utils.go index 8bfcfae..01b2692 100644 --- a/utils.go +++ b/utils.go @@ -3,49 +3,52 @@ package main import ( "bytes" "encoding/binary" - "encoding/gob" "io" "log" "net" + + "github.com/klauspost/compress/zstd" ) -func Compress(writer io.Writer, data [][]byte) { +func Compress(writer io.Writer, data []byte) { // encode gob - enc := gob.NewEncoder(writer) - err := enc.Encode(data) - if err != nil { - log.Panic(err) - } - - // zstd compress - // zenc, err := zstd.NewWriter(writer) + // enc := gob.NewEncoder(writer) + // err := enc.Encode(data) // if err != nil { // log.Panic(err) // } - // err = zenc.Flush() - // if err != nil { - // log.Println(err) - // } + + // zstd compress + zenc, err := zstd.NewWriter(writer) + if err != nil { + log.Panic(err) + } + zenc.Write(data) + err = zenc.Flush() + if err != nil { + log.Println(err) + } } -func Decompress(data []byte) (frames [][]byte) { +func Decompress(data []byte) (frames []byte) { var err error var buf = bytes.NewBuffer(data) - // var zdec *zstd.Decoder - // zdec, err = zstd.NewReader(buf) - // if err != nil { - // log.Panic(err) - // } - // zdec.Close() - - dec := gob.NewDecoder(buf) - err = dec.Decode(&frames) + var zdec *zstd.Decoder + zdec, err = zstd.NewReader(buf) if err != nil { log.Panic(err) } + zdec.Close() + frames = buf.Bytes() + + // dec := gob.NewDecoder(buf) + // err = dec.Decode(&frames) + // if err != nil { + // log.Panic(err) + // } return }