SSE - how to correctly write responses? added by arthurmaciel on Mon Jun 23 05:21:35 2014
(use awful spiffy extras data-structures) (enable-sxml #t) (define-page "/test" (lambda () (add-javascript "var source = new EventSource('/sse'); source.onmessage = function (event) { document.body.innerHTML = event.data; };") "")) (define (send-sse-headers) (let ((resp (update-response (current-response) code: 200 reason: "OK" headers: (headers '((content-type text/event-stream) (cache-control no-cache) (connection keep-alive) (transfer-encoding chunked)) (response-headers (current-response)))))) (parameterize ((current-response resp)) (write-logged-response)))) (define (send-sse-data data) (display (conc "data: " data "\n\n") (response-port (current-response))) (finish-response-body (current-response))) (define-page "/sse" (lambda () (send-sse-headers) (let loop () (send-sse-data (random 10)) (thread-sleep! 5) (loop))))