From 68f04bf7bbfec3fe0c63add1ec14fb9cc66cefe1 Mon Sep 17 00:00:00 2001 From: John Date: Sat, 19 May 2018 00:18:35 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E7=94=B1=E4=BA=8E=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E4=BF=AE=E6=94=B9=E6=97=B6=E9=97=B4=E4=B8=8D=E5=8F=8A?= =?UTF-8?q?=E6=97=B6=E5=BC=95=E8=B5=B7=E7=9A=84gproc=E8=BF=9B=E7=A8=8B?= =?UTF-8?q?=E9=80=9A=E4=BF=A1=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- g/os/gproc/gproc_comm.go | 16 +++------------- 1 file changed, 3 insertions(+), 13 deletions(-) diff --git a/g/os/gproc/gproc_comm.go b/g/os/gproc/gproc_comm.go index 5f0393d58..693e92942 100644 --- a/g/os/gproc/gproc_comm.go +++ b/g/os/gproc/gproc_comm.go @@ -18,7 +18,6 @@ import ( "gitee.com/johng/gf/g/os/gflock" "gitee.com/johng/gf/g/util/gconv" "gitee.com/johng/gf/g/os/gfsnotify" - "gitee.com/johng/gf/g/container/gtype" "gitee.com/johng/gf/g/container/gqueue" "gitee.com/johng/gf/g/encoding/gbinary" ) @@ -27,7 +26,7 @@ const ( // 由于子进程的temp dir有可能会和父进程不一致(特别是windows下),影响进程间通信,这里统一使用环境变量设置 gPROC_TEMP_DIR_ENV_KEY = "gproc.tempdir" // 自动通信文件清理时间间隔 - gPROC_COMM_AUTO_CLEAR_INTERVAL = time.Second + gPROC_COMM_AUTO_CLEAR_INTERVAL = 10*time.Second // 写入通信数据失败时候的重试次数 gPROC_COMM_FAILURE_RETRY_COUNT = 3 // (毫秒)主动通信内容检查时间间隔 @@ -40,8 +39,6 @@ var commClearLocker = gflock.New("comm.clear.lock") var commLocker = gflock.New(fmt.Sprintf("%d.lock", os.Getpid())) // 进程通信消息队列 var commQueue = gqueue.New() -// 通信文件修改时间 -var commUpdateTime = gtype.NewInt64() // TCP通信数据结构定义 type Msg struct { @@ -68,7 +65,7 @@ func init() { os.Exit(1) } fileMtime := gfile.MTime(path) - commUpdateTime.Set(fileMtime) + //commUpdateTime.Set(fileMtime) if gtime.Second() - fileMtime < 10 { // 初始化时读取已有数据(文件修改时间在10秒以内) checkCommBuffer(path) @@ -120,24 +117,17 @@ func autoActiveCheckComm() { // 手动检查进程通信消息,如果存在消息曾推送到进程消息队列 func checkCommBuffer(path string) { commLocker.Lock() - defer commLocker.UnLock() - // 检测文件修改时间 - mtime := gfile.MTimeMillisecond(path) - if mtime == commUpdateTime.Val() { - return - } // 读取进程间通信数据 buffer := gfile.GetBinContents(path) if len(buffer) > 0 { os.Truncate(path, 0) } + commLocker.UnLock() if len(buffer) > 0 { for _, v := range bufferToMsgs(buffer) { commQueue.PushBack(v) } } - // 保存上一次检测的文件修改时间 - commUpdateTime.Set(mtime) } // 获取其他进程传递到当前进程的消息包,阻塞执行