@@ -152,8 +152,8 @@ func (s *VllmSimulator) Start(ctx context.Context) error {
152152 return err
153153 }
154154
155- // start the http server
156- return s .startServer (listener )
155+ // start the http server with context support
156+ return s .startServer (ctx , listener )
157157}
158158
159159func (s * VllmSimulator ) newListener () (net.Listener , error ) {
@@ -166,7 +166,7 @@ func (s *VllmSimulator) newListener() (net.Listener, error) {
166166}
167167
168168// startServer starts http server on port defined in command line
169- func (s * VllmSimulator ) startServer (listener net.Listener ) error {
169+ func (s * VllmSimulator ) startServer (ctx context. Context , listener net.Listener ) error {
170170 r := fasthttprouter .New ()
171171
172172 // support completion APIs
@@ -195,7 +195,33 @@ func (s *VllmSimulator) startServer(listener net.Listener) error {
195195 }
196196 }()
197197
198- return server .Serve (listener )
198+ // Start server in a goroutine
199+ serverErr := make (chan error , 1 )
200+ go func () {
201+ s .logger .Info ("HTTP server starting" )
202+ serverErr <- server .Serve (listener )
203+ }()
204+
205+ // Wait for either context cancellation or server error
206+ select {
207+ case <- ctx .Done ():
208+ s .logger .Info ("Shutdown signal received, shutting down HTTP server gracefully" )
209+
210+ // Gracefully shutdown the server
211+ if err := server .Shutdown (); err != nil {
212+ s .logger .Error (err , "Error during server shutdown" )
213+ return err
214+ }
215+
216+ s .logger .Info ("HTTP server stopped" )
217+ return nil
218+
219+ case err := <- serverErr :
220+ if err != nil {
221+ s .logger .Error (err , "HTTP server failed" )
222+ }
223+ return err
224+ }
199225}
200226
201227// Print prints to a log, implementation of fasthttp.Logger
0 commit comments