From: Joseph McDonald Date: 2001-03-29T08:17:32+09:00 Subject: [ruby-talk:13294] ruby slowww socket handling I've got a simple server that spits back its requests to the client. when the client is written in ruby, I can only pump through about 62 messages per second. The same thing in perl does about 50,000 messages per second! Has anyone else noticed this discrepency? It's pretty huge! I can speed things up a bit by forking off lots of clients, but still can't even begin to approach the speed that perl gives. Also, I notice the same problem when the server is written in ruby, the tests below were using a server written in perl. Any ideas about this problem? This is on linux with the latest kernel. thanks, -joe Here is the ruby client: #!/usr/bin/env ruby require 'socket' REQUESTS = 500 puts "start: " << `date` begin socket = TCPSocket.new('localhost', 5000) rescue puts "socket error: " + $! exit end REQUESTS.times do |i| socket.puts("abc=def") answer = socket.gets end socket.close puts "Sent #{REQUESTS} requests." puts "end: " << `date` ./test-client.rb start: Wed Mar 28 15:07:55 PST 2001 Sent 500 requests. end: Wed Mar 28 15:08:15 PST 2001 Here is the perl version: ------------------------------------------------------------------ #!/usr/bin/perl use Socket; use strict; use constant REQUESTS => 50000; my $Remote_host = 'localhost'; my $Remote_port = 5000; # create a socket socket(SERVER, PF_INET, SOCK_STREAM, getprotobyname('tcp')); my $paddr = sockaddr_in($Remote_port, inet_aton($Remote_host)); # connect connect(SERVER, $paddr) or die "$!\n"; select(SERVER); $| = 1; select(STDOUT); for (0..REQUESTS) { print SERVER "abc=def\n"; my $line = ; } ./test-client.pl start: Wed Mar 28 15:10:08 PST 2001 end: Wed Mar 28 15:10:09 PST 2001