putting some load on a tiny io-bound application

This commit is contained in:
Dan Buch 2012-06-16 00:41:18 -04:00
parent 13e9e7f408
commit f342fa2734
3 changed files with 45 additions and 0 deletions

1
ruby-sockets/marco-polo/.gitignore vendored Normal file
View File

@ -0,0 +1 @@
/*.sqlite3*

View File

@ -0,0 +1,11 @@
require 'socket'
loop do
TCPSocket.open('127.0.0.1', 22000) do |sock|
sock.send("sally #{rand(100)} #{rand(100)}\n", 0)
sock.recv(100)
sock.close
STDOUT.write('.')
STDOUT.flush
end
end

View File

@ -0,0 +1,33 @@
require 'eventmachine'
require 'sequel'
DB = Sequel.connect('sqlite://marco-polo.sqlite3')
if DB[:locations].nil?
DB.create_table :locations do
primary_key :id
String :client
Integer :x
Integer :y
end
end
module MarcoPoloServer
def post_init
@locations = DB[:locations]
end
def receive_data(data)
client, x, y = data.split
@locations.insert(:client => client, :x => x.to_i, :y => y.to_i)
send_data("thanks\n")
rescue => e
STDERR.puts("#{e.class.name} #{e.message}: #{e.backtrace.join("\n")}")
end
end
EventMachine.run do
host, port = '0.0.0.0', 22000
EventMachine.start_server(host, port, MarcoPoloServer)
puts "Listening on #{host}:#{port}"
end