Commit a2c68af

mokha <mokha@cisco.com>
2019-03-15 01:01:12
post work to a cached thread pool.
1 parent 89e8812
lib/minbox/server.rb
@@ -12,6 +12,7 @@ module Minbox
       @key = OpenSSL::PKey::RSA.new(2048)
       logger.debug("Starting server on port #{port}...")
       @server = TCPServer.new(port.to_i)
+      @thread_pool = Concurrent::CachedThreadPool.new
     end
 
     def tls?
@@ -30,8 +31,10 @@ module Minbox
     end
 
     def handle(socket, &block)
-      logger.debug("client connected: #{socket.inspect}")
-      Client.new(self, socket, logger).handle(&block)
+      @thread_pool.post do
+        logger.debug("client connected: #{socket.inspect}")
+        Client.new(self, socket, logger).handle(&block)
+      end
     end
 
     def shutdown!
lib/minbox.rb
@@ -1,9 +1,11 @@
 # frozen_string_literal: true
 
 require 'base64'
+require 'concurrent'
 require 'hashie'
 require 'logger'
 require 'socket'
+require 'socket'
 
 require 'minbox/core'
 require 'minbox/publisher'
spec/minbox/server_spec.rb
@@ -1,7 +1,5 @@
 # frozen_string_literal: true
 
-require 'spec_helper'
-
 RSpec.describe Minbox::Server do
   describe '#handle' do
     let(:host) { 'localhost' }
Gemfile.lock
@@ -2,6 +2,7 @@ PATH
   remote: .
   specs:
     minbox (0.1.4)
+      concurrent-ruby (~> 1.1)
       hashie (~> 3.6)
       mail (~> 2.7)
       redis (~> 4.1)
minbox.gemspec
@@ -35,6 +35,7 @@ Gem::Specification.new do |spec|
   spec.executables   = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
   spec.require_paths = ['lib']
 
+  spec.add_dependency 'concurrent-ruby', '~> 1.1'
   spec.add_dependency 'hashie', '~> 3.6'
   spec.add_dependency 'mail', '~> 2.7'
   spec.add_dependency 'redis', '~> 4.1'