putting some load on a tiny io-bound application
This commit is contained in:
parent
13e9e7f408
commit
f342fa2734
1
ruby-sockets/marco-polo/.gitignore
vendored
Normal file
1
ruby-sockets/marco-polo/.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
||||
/*.sqlite3*
|
11
ruby-sockets/marco-polo/client.rb
Normal file
11
ruby-sockets/marco-polo/client.rb
Normal 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
|
33
ruby-sockets/marco-polo/em-server.rb
Normal file
33
ruby-sockets/marco-polo/em-server.rb
Normal 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
|
Loading…
Reference in New Issue
Block a user