gf/g/os/gproc/gproc_comm.go

43 lines
1.3 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// Copyright 2018 gf Author(https://github.com/gogf/gf). All Rights Reserved.
//
// This Source Code Form is subject to the terms of the MIT License.
// If a copy of the MIT was not distributed with this file,
// You can obtain one at https://github.com/gogf/gf.
// "不要通过共享内存来通信,而应该通过通信来共享内存"
package gproc
import (
"os"
"github.com/gogf/gf/g/os/gfile"
"github.com/gogf/gf/g/util/gconv"
"github.com/gogf/gf/g/container/gmap"
)
// 本地进程通信接收消息队列(按照分组进行构建的map键值为*gqueue.Queue对象)
var commReceiveQueues = gmap.NewStringInterfaceMap()
// (用于发送)已建立的PID对应的Conn通信对象键值为一个Pool防止并行使用同一个通信对象造成数据重叠
var commPidConnMap = gmap.NewIntInterfaceMap()
// TCP通信数据结构定义
type Msg struct {
Pid int // PID来源哪个进程
Data []byte // 数据
Group string // 分组名称
}
// 获取指定进程的通信文件地址
func getCommFilePath(pid int) string {
return getCommDirPath() + gfile.Separator + gconv.String(pid)
}
// 获取进程间通信目录地址
func getCommDirPath() string {
tempDir := os.Getenv(gPROC_TEMP_DIR_ENV_KEY)
if tempDir == "" {
tempDir = gfile.TempDir()
}
return tempDir + gfile.Separator + "gproc"
}