github.com/zhongdalu/gf@v1.0.0/g/os/gproc/gproc_comm.go (about) 1 // Copyright 2018 gf Author(https://github.com/zhongdalu/gf). All Rights Reserved. 2 // 3 // This Source Code Form is subject to the terms of the MIT License. 4 // If a copy of the MIT was not distributed with this file, 5 // You can obtain one at https://github.com/zhongdalu/gf. 6 // "不要通过共享内存来通信,而应该通过通信来共享内存" 7 8 package gproc 9 10 import ( 11 "github.com/zhongdalu/gf/g/container/gmap" 12 "github.com/zhongdalu/gf/g/os/gfile" 13 "github.com/zhongdalu/gf/g/util/gconv" 14 "os" 15 ) 16 17 // 进程通信数据结构 18 type Msg struct { 19 SendPid int `json:"spid"` // 发送进程ID 20 RecvPid int `json:"rpid"` // 接收进程ID 21 Group string `json:"group"` // 分组名称 22 Data []byte `json:"data"` // 原始数据 23 } 24 25 // 本地进程通信接收消息队列(按照分组进行构建的map,键值为*gqueue.Queue对象) 26 var commReceiveQueues = gmap.NewStrAnyMap() 27 28 // (用于发送)已建立的PID对应的Conn通信对象,键值为一个Pool,防止并行使用同一个通信对象造成数据重叠 29 var commPidConnMap = gmap.NewIntAnyMap() 30 31 // 获取指定进程的通信文件地址 32 func getCommFilePath(pid int) string { 33 return getCommDirPath() + gfile.Separator + gconv.String(pid) 34 } 35 36 // 获取进程间通信目录地址 37 func getCommDirPath() string { 38 tempDir := os.Getenv(gPROC_TEMP_DIR_ENV_KEY) 39 if tempDir == "" { 40 tempDir = gfile.TempDir() 41 } 42 return tempDir + gfile.Separator + "gproc" 43 }