Lifetime control of webserver

Hi, My application is not a webserver but needs to run a webserver for part but not all of its lifetime. Particularly, there's a part that does some complex computation and I want a webserver to expose its internal state/progress through HTTP. It seems that the typical and expected way to use a webserver is to designate the entire app itself as a webserver, so that functions like the following are basically infinite loops that serve HTTP: Web.Scotty.scotty: http://hackage.haskell.org/package/scotty-0.11.2/docs/Web-Scotty.html#v:scot... Network.Wai.Handler.Warp.run: http://hackage.haskell.org/package/warp-3.2.22/docs/Network-Wai-Handler-Warp... Can I run a webserver with explicit control of its lifetime? Particularly, I want to be able to kill it without killing the app or explicitly serve one request at a time. I'm not restricted to scotty or warp. Josh

Not sure if I'm missing something, but is there any reason why you couldn't
spin up the server in a thread then kill it when required?
- Lyndon
On Fri, Jul 13, 2018 at 11:51 AM ☂Josh Chia (謝任中)
Hi,
My application is not a webserver but needs to run a webserver for part but not all of its lifetime. Particularly, there's a part that does some complex computation and I want a webserver to expose its internal state/progress through HTTP.
It seems that the typical and expected way to use a webserver is to designate the entire app itself as a webserver, so that functions like the following are basically infinite loops that serve HTTP:
Web.Scotty.scotty: http://hackage.haskell.org/package/scotty-0.11.2/docs/Web-Scotty.html#v:scot...
Network.Wai.Handler.Warp.run: http://hackage.haskell.org/package/warp-3.2.22/docs/Network-Wai-Handler-Warp...
Can I run a webserver with explicit control of its lifetime? Particularly, I want to be able to kill it without killing the app or explicitly serve one request at a time. I'm not restricted to scotty or warp.
Josh _______________________________________________ Haskell-Cafe mailing list To (un)subscribe, modify options or view archives go to: http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe Only members subscribed via the mailman list are allowed to post.

Do you mean something like calling the scotty function in a server thread
and then killing the server thread when I want to stop serving? If proper
cleanup happens when I kill the thread, this should work for me.
On Fri, Jul 13, 2018 at 10:01 AM Lyndon Maydwell
Not sure if I'm missing something, but is there any reason why you couldn't spin up the server in a thread then kill it when required?
- Lyndon
On Fri, Jul 13, 2018 at 11:51 AM ☂Josh Chia (謝任中)
wrote: Hi,
My application is not a webserver but needs to run a webserver for part but not all of its lifetime. Particularly, there's a part that does some complex computation and I want a webserver to expose its internal state/progress through HTTP.
It seems that the typical and expected way to use a webserver is to designate the entire app itself as a webserver, so that functions like the following are basically infinite loops that serve HTTP:
Web.Scotty.scotty: http://hackage.haskell.org/package/scotty-0.11.2/docs/Web-Scotty.html#v:scot...
Network.Wai.Handler.Warp.run: http://hackage.haskell.org/package/warp-3.2.22/docs/Network-Wai-Handler-Warp...
Can I run a webserver with explicit control of its lifetime? Particularly, I want to be able to kill it without killing the app or explicitly serve one request at a time. I'm not restricted to scotty or warp.
Josh _______________________________________________ Haskell-Cafe mailing list To (un)subscribe, modify options or view archives go to: http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe Only members subscribed via the mailman list are allowed to post.

Yes that's what I had in mind.
You can do some fun things with Control.Concurrent.Chan as well if you need
special sequencing, or limits on requests served or callbacks into the main
thread etc.
- Lyndon
On Fri, Jul 13, 2018 at 12:32 PM ☂Josh Chia (謝任中)
Do you mean something like calling the scotty function in a server thread and then killing the server thread when I want to stop serving? If proper cleanup happens when I kill the thread, this should work for me.
On Fri, Jul 13, 2018 at 10:01 AM Lyndon Maydwell
wrote: Not sure if I'm missing something, but is there any reason why you couldn't spin up the server in a thread then kill it when required?
- Lyndon
On Fri, Jul 13, 2018 at 11:51 AM ☂Josh Chia (謝任中)
wrote: Hi,
My application is not a webserver but needs to run a webserver for part but not all of its lifetime. Particularly, there's a part that does some complex computation and I want a webserver to expose its internal state/progress through HTTP.
It seems that the typical and expected way to use a webserver is to designate the entire app itself as a webserver, so that functions like the following are basically infinite loops that serve HTTP:
Web.Scotty.scotty: http://hackage.haskell.org/package/scotty-0.11.2/docs/Web-Scotty.html#v:scot...
Network.Wai.Handler.Warp.run: http://hackage.haskell.org/package/warp-3.2.22/docs/Network-Wai-Handler-Warp...
Can I run a webserver with explicit control of its lifetime? Particularly, I want to be able to kill it without killing the app or explicitly serve one request at a time. I'm not restricted to scotty or warp.
Josh _______________________________________________ Haskell-Cafe mailing list To (un)subscribe, modify options or view archives go to: http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe Only members subscribed via the mailman list are allowed to post.

You could also look at ekg for "inspiration" (at least for the "expose data
via a URL" part): http://hackage.haskell.org/package/ekg
Doug
On Thu, Jul 12, 2018 at 10:55 PM Lyndon Maydwell
Yes that's what I had in mind.
You can do some fun things with Control.Concurrent.Chan as well if you need special sequencing, or limits on requests served or callbacks into the main thread etc.
- Lyndon
On Fri, Jul 13, 2018 at 12:32 PM ☂Josh Chia (謝任中)
wrote: Do you mean something like calling the scotty function in a server thread and then killing the server thread when I want to stop serving? If proper cleanup happens when I kill the thread, this should work for me.
On Fri, Jul 13, 2018 at 10:01 AM Lyndon Maydwell
wrote: Not sure if I'm missing something, but is there any reason why you couldn't spin up the server in a thread then kill it when required?
- Lyndon
On Fri, Jul 13, 2018 at 11:51 AM ☂Josh Chia (謝任中)
wrote: Hi,
My application is not a webserver but needs to run a webserver for part but not all of its lifetime. Particularly, there's a part that does some complex computation and I want a webserver to expose its internal state/progress through HTTP.
It seems that the typical and expected way to use a webserver is to designate the entire app itself as a webserver, so that functions like the following are basically infinite loops that serve HTTP:
Web.Scotty.scotty: http://hackage.haskell.org/package/scotty-0.11.2/docs/Web-Scotty.html#v:scot...
Network.Wai.Handler.Warp.run: http://hackage.haskell.org/package/warp-3.2.22/docs/Network-Wai-Handler-Warp...
Can I run a webserver with explicit control of its lifetime? Particularly, I want to be able to kill it without killing the app or explicitly serve one request at a time. I'm not restricted to scotty or warp.
Josh _______________________________________________ Haskell-Cafe mailing list To (un)subscribe, modify options or view archives go to: http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe Only members subscribed via the mailman list are allowed to post.
_______________________________________________ Haskell-Cafe mailing list To (un)subscribe, modify options or view archives go to: http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe Only members subscribed via the mailman list are allowed to post.
participants (3)
-
Doug Burke
-
Lyndon Maydwell
-
☂Josh Chia (謝任中)