From 20a4c4bfb5b9ea427f9117408ff0e4513ebef9eb Mon Sep 17 00:00:00 2001
From: zhangmeng <775834166@qq.com>
Date: 星期一, 26 八月 2019 17:08:41 +0800
Subject: [PATCH] use shm direct read
---
shm.go | 69 +++++++++-------------------------
1 files changed, 19 insertions(+), 50 deletions(-)
diff --git a/shm.go b/shm.go
index ba48253..7997e7d 100644
--- a/shm.go
+++ b/shm.go
@@ -3,19 +3,16 @@
import (
"errors"
"fmt"
- // "io"
-
+ "io"
"time"
- "github.com/tmthrgd/shm-go"
+ "basic.com/valib/shm.git"
)
// SHM share memory
type SHM struct {
rw *shm.ReadWriteCloser
typ td
-
- data []byte
}
// Send impl interface Diliver
@@ -24,26 +21,12 @@
return errors.New("please init shm producer first")
}
- ch := make(chan int)
- go func(){
- n, _ := s.rw.Write(data)
- ch <- n
- }()
- select{
- case <-ch:
- return nil
- case <- time.After(3 * time.Second):
- return errors.New("send time out")
+ n, err := s.rw.Write(data)
+ if n < 1 {
+ fmt.Println("recv data less than 1 length")
}
- return errors.New("send should't here")
-
- // n, err := s.rw.Write(data)
- // if n < 1 {
- // fmt.Println("recv data less than 1 length")
- // }
-
- // return err
+ return err
}
// Recv impl interface Diliver
@@ -53,33 +36,19 @@
return nil, errors.New("please open shm consumer first")
}
- ch := make(chan int)
- go func(){
- n, _ := s.rw.Read(s.data)
- ch <- n
- }()
- select{
- case d := <-ch:
- if d > 0{
- data := make([]byte, d)
- copy(data, s.data)
- return data, nil
- }
- case <- time.After(3 * time.Second):
- return nil, errors.New("recv time out")
- }
-
- return nil, errors.New("recv should't here")
-
-
// data := make([]byte, maxRecvSize)
// n, err := s.rw.Read(data)
// if err == nil || err == io.EOF {
- // data = data[:n:n]
+ // data := make([]byte, maxRecvSize)
+ // copy(data, s.recvData)
// return data, nil
// }
- // return nil, err
+ data, err := s.rw.DirectRead()
+ if err == nil || err == io.EOF {
+ return data, nil
+ }
+ return nil, err
}
// Close impl interface Deliver
@@ -116,15 +85,16 @@
blocks, size = param[0], param[1]
// return nil, errors.New("shmServer created recv too much parameters")
}
+
+ time.Sleep(time.Millisecond)
shm.Unlink(url)
rw, err := shm.CreateSimplex(url, 0644, blocks, size)
if err == nil {
fmt.Println(rw.Name())
return &SHM{
- rw,
- agent,
- make([]byte, maxRecvSize),
+ rw: rw,
+ typ: agent,
}, nil
}
@@ -139,9 +109,8 @@
rw, err := shm.OpenSimplex(url)
if err == nil {
return &SHM{
- rw,
- coactee,
- make([]byte, maxRecvSize),
+ rw: rw,
+ typ: coactee,
}, nil
}
return nil, err
--
Gitblit v1.8.0