2014-11-30 29 views
9
using HttpServer 

http = HttpHandler() do request::Request, response::Response 
    show(request) 
    Response("Hello there") 
end 

http.events["error"] = (client, error) -> println(error) 
http.events["listen"] = (port) -> println("Listening on $port") 
server = Server(http) 

t = @async run(server, 3000) 

Bu, basit bir küçük web sunucusunu senkronize olmayan bir şekilde başlatır. Sorun şu ki nasıl durduğum hakkında hiçbir fikrim yok. Julia dokümantasyonunu inceledim ve bu görevi kuyruktan kaldıracak bir işlev bulmaya çalışıyorum (kill, interrupt, vs.) ama hiçbir şey işe yaramıyor gibi görünüyor.Julia'da bir görevi/korotayı nasıl öldürebilirim?

Bu görevi nasıl öldürebilirim?

+0

da problem için basit bir çözüm bir iptal döngü (https://github.com/JuliaWeb/HttpServer.jl/blob/master/src/HttpServer.jl#L204) [çalışma] reimplement olacaktır . Julia libuvayı kullanır, yani 'kabul et' gerçekten [uv_accept] 'dir (http://docs.libuv.org/en/v1.x/stream.html#c.uv_accept). Esp bakın [Uv_connection_cb] (http://docs.libuv.org/en/v1.x/stream.html#c.uv_connection_cb). – Phillip

+0

Teşekkürler, ama aslında bundan biraz daha genel arıyorum. HTTP sunucusu, eşzamansız çalışan bir görevin yalnızca bir örneğidir. – Nick

cevap

5

Özel olarak bir görevi sonlandırmak için resmi bir yol göremiyorum, ancak genel bir çözüm beklemede olan bir istisna ile hemen zamanlama yapmanıza olanak veren the addition of throwto, olduğunu düşünüyorum.

... 
t = @async run(server, 3000) 
... 
ex = InterruptException() 
Base.throwto(t, ex) 
close(http.sock) # ideally HttpServer would catch exception to cleanup