diff --git a/async-websocket.gemspec b/async-websocket.gemspec index fbab4f2..c96392c 100644 --- a/async-websocket.gemspec +++ b/async-websocket.gemspec @@ -20,7 +20,7 @@ Gem::Specification.new do |spec| spec.add_dependency "async-io" spec.add_development_dependency "async-rspec" - spec.add_development_dependency "falcon", "~> 0.17" + spec.add_development_dependency "falcon", "~> 0.28.0" spec.add_development_dependency "covered" spec.add_development_dependency "bundler" diff --git a/examples/chat/client.rb b/examples/chat/client.rb index a232c29..315a731 100755 --- a/examples/chat/client.rb +++ b/examples/chat/client.rb @@ -20,6 +20,7 @@ input_task = task.async do while line = stdin.read_until("\n") + puts "Sending message: #{line}" connection.send_message({text: line}) end end diff --git a/examples/chat/config.ru b/examples/chat/config.ru index a6d6f48..fc9fd08 100755 --- a/examples/chat/config.ru +++ b/examples/chat/config.ru @@ -25,6 +25,37 @@ class Room @connections.each(&block) end + def allocations + counts = Hash.new{|h,k| h[k] = 0} + + ObjectSpace.each_object do |object| + counts[object.class] += 1 + end + + return counts + end + + def show_allocations(key, limit = 1000) + Async.logger.info(self) do |buffer| + ObjectSpace.each_object(key).each do |object| + buffer.puts object + end + end + end + + def print_allocations(minimum = @connections.count) + count = 0 + + Async.logger.info(self) do |buffer| + allocations.select{|k,v| v >= minimum}.sort_by{|k,v| -v}.each do |key, value| + count += value + buffer.puts "#{key}: #{value} allocations" + end + + buffer.puts "** #{count.to_f / @connections.count} objects per connection." + end + end + def command(code) Async.logger.warn self, "eval(#{code})" @@ -51,6 +82,7 @@ class Room self.connect(connection) while message = connection.next_message + puts "Message: #{message.inspect}" if message["text"] =~ /^\/(.*?)$/ begin result = self.command($1)