I am testing fastcgi with all kind of thing
Now I met the first problem , it seems newlisp eval-string will change %; to be none.
here is
<%
(print "Content-type: text/htmlrnrn")
;(module "web.lsp")
;(Web:send-headers)
%>
<html>
<body>
<div style ="height:30px;width:100%; background:black;"></div>
<div>
<%
(print (string "It works newlisp with module web " (date)) )
%>
</div>
</body>
</html>
It will output like this:
<html>
<body>
<div style ="height:30px;width:100It works newlisp with module web Tue Nov 15 20:07:16 2011
</div>
</body>
</html>
you see, width:100%;backgound.... to width:100
why?
newlisp will change %; ??
I use put-page code from module CGI ,I think this code is ok
(define (put-page file-name , page start end)
(set 'page (read-file file-name))
(set 'start (find "<%" page))
(set 'end (find "%>" page))
(while (and start end)
(print (slice page 0 start))
(eval-string (slice page (+ start 2) (- end start 2)) MAIN (print (last-error)))
;(if-not (nil? err-ret) (print (string err-ret)))
(set 'page (slice page (+ end 2)))
(set 'start (find "<%" page))
(set 'end (find "%>" page)))
(print page))
https://github.com/guu/newlisp-fastcgi/blob/master/fcgi.lsp
There is probably no bug there.
Are you using FCGI_printf ?
Then % starts a format specifier, which might eventually misinterpreted by the underlying vfprintf implementation.
You could try to mask the % with another %, so writing something like this:
<%
(print "Content-type: text/htmlrnrn")
;(module "web.lsp")
;(Web:send-headers)
%>
<html>
<body>
<div style ="height:30px;width:100%%; background:black;"></div>
<div>
<%
(print (string "It works newlisp with module web " (date)) )
%>
</div>
</body>
</html>
Take a look here (//http).
True
thanks
But it's not perfect if user need change % to %% by hand
So I add (replace "%" str "%%")
continue testing
Quote
But it's not perfect if user need change % to %% by hand
That is not neccessary if you take FCGI_puts as underlying "printer".
hmm...
First I used FCGI_puts
then it is not perfect too, it'll add a n after everyline
Sot last
I use FCGI_putchar to do everything.
I hope FCGI_putchar wont be slow.
:)
Perhaps you could just create your own function, which takes care of all the issues,
or you use define-macro, to reduce the runtime overhead.
Using a putchar on a string means you need to iterate over a list of chars,
printf("%sn","Hello, World!")
is one call (one library call), putchar would need 14 calls, not to mention the work needed to extract
every char out of the string.
So the question is: how long do call FastCGI fast ?
actually
it is not slowly as we thought
I used webbench to test
webbench -t 10 -c 1000 url
I did not see the different speed between printf and putchar
maybe it is the same speed ?
I dont know how long FASTCGI calls by the way
And yes, I can write a function to get libfcgi's stdin stdout etc handles
so that I can use "fwrite" "fprintf" to work. better
But if I do that, it means I need to edit the libfcgi
Which I dont think it is important, cause If somebody really want to create a web site by runnig newlisp with fatcgi mode
He can do it in many ways
Such as complie a new version of newlisp , include fcgi_stdio.h to wrapper the basic C functions to work like fastcgi
I think it is possible and a very easy way
But if lutz can work on that, I think he'll create a perfect newlisp-fcgi,
He knows everything about newlisp.
Second
He can you printf ,which means FCGI_printf ,just need a little focus on % to %%, it is easy,too
and everyone can do it right now
To be honset with you
I am a bit lazy
And for now ,I did not see the lower speed because of putchar
my fastcgi code runnig even faster than php , on webbench test results
One newlisp fastcgi process faster than 10 php-cgis ,Cool ,right?
on my mac book 466
So I may not want to change putchar to printf ,or create some own functions now
LOL