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

  • Thread starter John Pritchard-williams
  • Start date
J

John Pritchard-williams

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 ;-)

file_data=<myfilepath>

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=<myfilepath>
...
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...
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,769
Messages
2,569,580
Members
45,054
Latest member
TrimKetoBoost

Latest Threads

Top