Prechádzať zdrojové kódy

添加终端支持unix形式连接

lxg 3 rokov pred
rodič
commit
1e91789c78
1 zmenil súbory, kde vykonal 40 pridanie a 5 odobranie
  1. 40 5
      gateway/cli/server.go

+ 40 - 5
gateway/cli/server.go

@@ -7,6 +7,7 @@ import (
 	"git.nspix.com/golang/micro/helper/utils"
 	"net"
 	"os"
+	"path"
 	"runtime"
 	"strings"
 	"sync"
@@ -122,7 +123,7 @@ func (svr *Server) Handle(path string, cb HandleFunc) {
 	p = svr.executor
 	for i, token := range tokens {
 		token = strings.TrimSpace(strings.ToLower(token))
-		if token == ""{
+		if token == "" {
 			continue
 		}
 		if q, err = p.Children(token); err == nil {
@@ -141,13 +142,11 @@ func (svr *Server) Handle(path string, cb HandleFunc) {
 	}
 }
 
-func (svr *Server) Serve(listener net.Listener) (err error) {
+func (svr *Server) tcpServe(listener net.Listener) {
 	var (
+		err  error
 		conn net.Conn
 	)
-	svr.Handle("help", func(ctx *Context) (err error) {
-		return ctx.Success(svr.executor.String())
-	})
 	for {
 		if conn, err = listener.Accept(); err != nil {
 			break
@@ -156,6 +155,42 @@ func (svr *Server) Serve(listener net.Listener) (err error) {
 			_ = svr.process(atomic.AddInt32(&svr.seq, 1), conn)
 		}()
 	}
+}
+
+func (svr *Server) unixServe(filename string) {
+	var (
+		err      error
+		addr     *net.UnixAddr
+		listener net.Listener
+	)
+	if addr, err = net.ResolveUnixAddr("unix", filename); err != nil {
+		return
+	}
+	if listener, err = net.ListenUnix("unix", addr); err != nil {
+		return
+	}
+	svr.tcpServe(listener)
+	err = listener.Close()
+}
+
+func (svr *Server) Serve(listener net.Listener) (err error) {
+	svr.Handle("help", func(ctx *Context) (err error) {
+		return ctx.Success(svr.executor.String())
+	})
+	var wg sync.WaitGroup
+	if listener != nil {
+		wg.Add(1)
+		go func() {
+			svr.tcpServe(listener)
+		}()
+	}
+	if runtime.GOOS == "linux" {
+		wg.Add(1)
+		go func() {
+			svr.unixServe(path.Join(os.TempDir(), os.Getenv("MICRO_SERVICE_NAME")+".sock"))
+		}()
+	}
+	wg.Wait()
 	return
 }