创作人 Leo
编辑时间 Sun Nov 29,2020 at 09:30
AF_UNIX - 类 unix 操作系统通过管道文件进行数据交互,和 AF_INET 同样属于一种通信手段
该通信手段用于本机多个进程之间交互,比如cli命令行程序与其对应的守护进程通信
package main
import (
"fmt"
"github.com/gin-gonic/gin"
"net/http"
"os"
)
func main() {
var err error
socketFile := "../UnixFDTest.sock"
err = os.Remove(socketFile)
if err!=nil {
fmt.Println("remove "+ socketFile+" failed")
}
webEngine := gin.New()
webEngine.Use(gin.Logger(), gin.Recovery())
webEngine.Handle("GET", "/test", func(context *gin.Context) {
context.JSON(http.StatusOK, map[string]interface{}{
"msg":"hello world" ,
})
})
err = webEngine.RunUnix(socketFile)
if err!=nil {
panic(err)
}
}
package main
import (
"context"
"fmt"
"io/ioutil"
"net"
"net/http"
)
func main() {
sockFile := "../UnixFDTest.sock"
addr := &net.UnixAddr{Name: sockFile, Net: "unix"}
unixDial := func(_ context.Context, _ string, _ string) (conn net.Conn, err error) {
conn, err = net.DialUnix("unix", nil, addr)
return
}
client := &http.Client{Transport: &http.Transport{
DialContext: unixDial,
}}
resp, err := client.Get("http://localhost/test")
if err != nil {
fmt.Println(err)
} else {
fmt.Println(resp.StatusCode)
result,err := ioutil.ReadAll(resp.Body)
if err != nil {
panic(err)
}
fmt.Println("http response ", string(result))
}
}