@@ -146,8 +146,8 @@ func (s *VllmSimulator) Start(ctx context.Context) error {
146146 return err
147147 }
148148
149- // start the http server
150- return s .startServer (listener )
149+ // start the http server with context support
150+ return s .startServer (ctx , listener )
151151}
152152
153153func (s * VllmSimulator ) newListener () (net.Listener , error ) {
@@ -160,7 +160,7 @@ func (s *VllmSimulator) newListener() (net.Listener, error) {
160160}
161161
162162// startServer starts http server on port defined in command line
163- func (s * VllmSimulator ) startServer (listener net.Listener ) error {
163+ func (s * VllmSimulator ) startServer (ctx context. Context , listener net.Listener ) error {
164164 r := fasthttprouter .New ()
165165
166166 // support completion APIs
@@ -189,7 +189,33 @@ func (s *VllmSimulator) startServer(listener net.Listener) error {
189189 }
190190 }()
191191
192- return server .Serve (listener )
192+ // Start server in a goroutine
193+ serverErr := make (chan error , 1 )
194+ go func () {
195+ s .logger .Info ("HTTP server starting" )
196+ serverErr <- server .Serve (listener )
197+ }()
198+
199+ // Wait for either context cancellation or server error
200+ select {
201+ case <- ctx .Done ():
202+ s .logger .Info ("Shutdown signal received, shutting down HTTP server gracefully" )
203+
204+ // Gracefully shutdown the server
205+ if err := server .Shutdown (); err != nil {
206+ s .logger .Error (err , "Error during server shutdown" )
207+ return err
208+ }
209+
210+ s .logger .Info ("HTTP server stopped" )
211+ return nil
212+
213+ case err := <- serverErr :
214+ if err != nil {
215+ s .logger .Error (err , "HTTP server failed" )
216+ }
217+ return err
218+ }
193219}
194220
195221// Print prints to a log, implementation of fasthttp.Logger
0 commit comments