mirror of
https://github.com/janet-lang/janet
synced 2025-09-04 20:08:04 +00:00
Add ev/call.
This is a common operation, and making fibers manually can be tedious.
This commit is contained in:
@@ -1,27 +1,17 @@
|
||||
(defn handler
|
||||
"Simple handler for connections."
|
||||
[stream]
|
||||
(def id (gensym))
|
||||
(def b @"")
|
||||
(print "Connection " id "!")
|
||||
(while (:read stream 1024 b)
|
||||
(repeat 10 (print "work for " id " ...") (ev/sleep 1))
|
||||
(:write stream b)
|
||||
(buffer/clear b))
|
||||
(printf "Done %v!" id))
|
||||
|
||||
(defn spawn-kid
|
||||
"Run handler in a new fiber"
|
||||
[conn]
|
||||
(def f (fiber/new handler))
|
||||
(ev/go f conn))
|
||||
|
||||
(print "Starting echo server on 127.0.0.1:8000")
|
||||
|
||||
(def server (net/server "127.0.0.1" "8000"))
|
||||
(defer (:close stream)
|
||||
(def id (gensym))
|
||||
(def b @"")
|
||||
(print "Connection " id "!")
|
||||
(while (:read stream 1024 b)
|
||||
(repeat 10 (print "work for " id " ...") (ev/sleep 1))
|
||||
(:write stream b)
|
||||
(buffer/clear b))
|
||||
(printf "Done %v!" id)))
|
||||
|
||||
# Run server.
|
||||
(while true
|
||||
(with [conn (:accept server)]
|
||||
(spawn-kid conn)
|
||||
(ev/sleep 0.1)))
|
||||
(let [server (net/server "127.0.0.1" "8000")]
|
||||
(print "Starting echo server on 127.0.0.1:8000")
|
||||
(while true (ev/call handler (:accept server))))
|
||||
|
Reference in New Issue
Block a user