If you just need to handle HTTP request or build webapp, I suggest you use my web framework Artanis. It uses Guile inner sever based on thread. 在 2013-6-2 AM7:49,"Xin Wang" <[email protected]>写道:
> > > > 2013/5/31 Ludovic Courtès <[email protected]> > >> Xin Wang <[email protected]> skribis: >> >> > In Guile, the equivalent of kill-thread is cancel-thread, and is there >> any >> > equivalent of break-thread? >> > >> > [1] http://docs.racket-lang.org/reference/breakhandler.html >> >> If I understand correctly, “breaks” are similar to Guile’s “asyncs” >> (info "(guile) Asyncs"). >> >> However, I don’t understand what you’re trying to achieve. Could you >> give another example of the behavior you’re after? >> >> > I was reading source code of Arc language[1], and wondering if it is > possible to port it to Guile. > > It define a function to handle HTTP request in srv.arc(L48): > > (def handle-request-1 (s) > --- pruned --- > (with (th1 nil th2 nil) > (= th1 (thread > (after (handle-request-thread i o ip) > (close i o) > (kill-thread th2)))) > (= th2 (thread > (sleep threadlife*) > (unless (dead th1) > (prn "srv thread took too long for " ip)) > (break-thread th1) > (force-close i o)))))))) > > It create two threads to handle a request, one do main stuff and anthor > one wait to kill first one if it takes too much time. > > Although I'm not quite sure, I think one reason to use 'kill-thread' and > 'break-thread' differently is to make sure that exception handler function > is fully executed. ('after' is implemented by dynamic-wind). > > [1] http://ycombinator.com/arc/*arc3.1.tar* > > >> Thanks, >> Ludo’. >> >> >> >
