Webrick Servlet: 'chomping' ? Is this slowing it down?

Hi,

I’m not using Rails: just a standalone ‘Webrick’ Server. I have a very
simple Servlet which is serving text files: it works, but I notice that
it seeming to be two (maybe related?) things I need to fix:

  1. It is ‘chomping’ the text files: removing any ‘\r’, leaving ‘\n’
    chars at the end of my response string.

  2. It runs slower than Tomcat (fair enough), but really slow (~4-5
    times slower) when I access over a VPN (or a different n/w): the
    VPN/other n/w seems to be the link here. When running on a local n/w
    (or directly on the box itself), there is no noticeable difference in
    performance: but there a distinctive 5-10 second lag on the browser in
    the case of VPN/different n/w.

So any hints on optimizing the Ruby Servlet greatly appreciated - you
can see from the Java version that I’m really not interested in doing
anything to the data - I just want to delivery as fast as possible -
in tact.

The Webrick server is running on Ruby 1.8.x on a Windows 2000 box.

Anyway , here’s the servlets (stripped down to bare function).

–Ruby Servlet

def do_GET(request, response)
r=""; #probably not necessary…but habits from static languages
carry-over :wink:

file_data=

f=File.open(file_data,“r”); # load as pure bytes like the java
version?how?
r << f.read
f.close;

response.body=r;
response.status=200;
response[‘Content-Type’] =“text/plain”
end

–End of Ruby Servlet

–Equivalent Java Servlet
…doGet(HttpServletRequest request, HttpServletResponse response)…
out=response.getOutputStream()
f=

int len=bytes;
InputStream in = new FileInputStream(f);
byte[] buf = new byte[len];
while ((len = in.read(buf)) > 0)
{
out.write(buf,0,len);
}
out.flush();
out.close();
in.close();

–End of Java Servlet

Cheers

John

And also just for proof , here’s the timing from 2 ‘curl’ invocations
running over a VPN to get at the server.

==
curl “http://server:8080/tomcat” -o tomcat.out
% Total % Received % Xferd Average Speed Time Time Time
Current
Dload Upload Total Spent Left
Speed
100 27594 100 27594 0 0 10336 0 0:00:02 0:00:02 --:–:--
10652

curl “http://server:2000/webrick” -o webrick.out
% Total % Received % Xferd Average Speed Time Time Time
Current
Dload Upload Total Spent Left
Speed
100 27394 100 27394 0 0 2876 0 0:00:09 0:00:09 --:–:--
6173

The file in question was exactly 200 lines, and the correct size on disk
is ‘27594’ NOT ‘27394’: ‘od -c’ shows that the Ruby Servlet is
‘chomping’ on an extra ‘\r’ character…