@@ -63,47 +63,55 @@ func (svc *Service) Init(cfg *Config, r *rpc.Service, e env.Environment) (ok boo
6363 }
6464 }
6565
66+ if svc .cfg .Workers .Command != "" {
67+ svc .rr = roadrunner .NewServer (svc .cfg .Workers )
68+ }
69+
6670 return true , nil
6771}
6872
6973// Serve GRPC grpc.
7074func (svc * Service ) Serve () (err error ) {
7175 svc .mu .Lock ()
7276
73- if svc .env != nil {
74- if err := svc .env .Copy (svc .cfg .Workers ); err != nil {
75- return err
76- }
77- }
78-
79- svc .cfg .Workers .SetEnv ("RR_GRPC" , "true" )
80-
81- svc .rr = roadrunner .NewServer (svc .cfg .Workers )
82- svc .rr .Listen (svc .throw )
83-
84- if svc .cr != nil {
85- svc .rr .Attach (svc .cr )
86- }
87-
8877 if svc .grpc , err = svc .createGPRCServer (); err != nil {
78+ svc .mu .Unlock ()
8979 return err
9080 }
9181
92- lis , err := svc .cfg .Listener ()
82+ ls , err := svc .cfg .Listener ()
9383 if err != nil {
84+ svc .mu .Unlock ()
9485 return err
9586 }
87+ defer ls .Close ()
88+
89+ if svc .rr != nil {
90+ if svc .env != nil {
91+ if err := svc .env .Copy (svc .cfg .Workers ); err != nil {
92+ svc .mu .Unlock ()
93+ return err
94+ }
95+ }
9696
97- defer lis . Close ( )
97+ svc . cfg . Workers . SetEnv ( "RR_GRPC" , "true" )
9898
99- svc .mu . Unlock ( )
99+ svc .rr . Listen ( svc . throw )
100100
101- if err := svc .rr .Start (); err != nil {
102- return err
101+ if svc .cr != nil {
102+ svc .rr .Attach (svc .cr )
103+ }
104+
105+ if err := svc .rr .Start (); err != nil {
106+ svc .mu .Unlock ()
107+ return err
108+ }
109+ defer svc .rr .Stop ()
103110 }
104- defer svc .rr .Stop ()
105111
106- return svc .grpc .Serve (lis )
112+ svc .mu .Unlock ()
113+
114+ return svc .grpc .Serve (ls )
107115}
108116
109117// Stop the service.
@@ -167,22 +175,24 @@ func (svc *Service) createGPRCServer() (*grpc.Server, error) {
167175
168176 server := grpc .NewServer (opts ... )
169177
170- // php proxy services
171- services , err := parser .File (svc .cfg .Proto , path .Dir (svc .cfg .Proto ))
172- if err != nil {
173- return nil , err
174- }
175-
176- for _ , service := range services {
177- p := NewProxy (fmt .Sprintf ("%s.%s" , service .Package , service .Name ), svc .cfg .Proto , svc .rr )
178- for _ , m := range service .Methods {
179- p .RegisterMethod (m .Name )
178+ if svc .cfg .Proto != "" && svc .rr != nil {
179+ // php proxy services
180+ services , err := parser .File (svc .cfg .Proto , path .Dir (svc .cfg .Proto ))
181+ if err != nil {
182+ return nil , err
180183 }
181184
182- server .RegisterService (p .ServiceDesc (), p )
185+ for _ , service := range services {
186+ p := NewProxy (fmt .Sprintf ("%s.%s" , service .Package , service .Name ), svc .cfg .Proto , svc .rr )
187+ for _ , m := range service .Methods {
188+ p .RegisterMethod (m .Name )
189+ }
190+
191+ server .RegisterService (p .ServiceDesc (), p )
192+ }
183193 }
184194
185- // external services
195+ // external and native services
186196 for _ , r := range svc .services {
187197 r (server )
188198 }
0 commit comments