|
@@ -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
|
|
|
}
|
|
|
|