guile-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [FEATURE Request] Built-in server should support a thunk as body


From: David Thompson
Subject: Re: [FEATURE Request] Built-in server should support a thunk as body
Date: Mon, 25 Aug 2014 08:16:43 -0400
User-agent: Notmuch/0.18.1 (http://notmuchmail.org) Emacs/24.3.1 (x86_64-pc-linux-gnu)

Hi Nala,

Nala Ginrut <address@hidden> writes:

> I'm trying to handle static file with our sendfile, but I realized it's
> impossible to call it in the handler of run-server.
> Although sanitize-response supports procedure as body, it never let me
> use sendfile at any chance, because the final writing operation should
> be delayed to server-impl-write. If I do it in advanced (in
> sanitize-response), the body will appear before the http header, which
> is wrong way.
>
> My suggestion is to support thunk as body, the thunk included body
> writing operation, and sanitize-response will pass it to the next step
> without any cooking. When server-impl-write detected it's a thunk, it'll
> call it directly to write the body rather than calling
> write-response-body.
>
> Of course, in this way, users have to pass Content-Length manually in
> build-response. Consider the size of file will be confirmed when calling
> sendfile, it's easy to do that.
>
> In short, my approach is some kind of lazy evaluation for body handling.
>
> I can format a patch if it's agreed.
>
> Comments?

I'm currently writing a web application using Guile's built-in HTTP
server.  To serve static files, I build a response like:

  (values `((content-type . (text/css)))
          (call-with-input-file file-name get-bytevector-all))

Since the response body can be a string, bytevector, or lambda, I tried
using sendfile:

  (values `((content-type . (text/css)))
          (lambda (output)
            (call-with-input-file file-name
              (lambda (input)
                (sendfile output input file-size)))))

However, it didn't work because 'output' is a string port, but sendfile
requires file ports.

Does your proposal give us access to a file port that we can write to?
I'm still learning to use Guile's HTTP modules and serving static files
was something that confused me for awhile.

-- 
David Thompson
Web Developer - Free Software Foundation - http://fsf.org
GPG Key: 0FF1D807
Support the FSF: https://fsf.org/donate



reply via email to

[Prev in Thread] Current Thread [Next in Thread]