lib/right_speed/worker/accepter.rb in right_speed-0.1.0 vs lib/right_speed/worker/accepter.rb in right_speed-0.2.0
- old
+ new
@@ -1,30 +1,30 @@
require_relative 'base'
module RightSpeed
module Worker
class Accepter < Base
- def configure(sock)
- @sock = sock
- end
-
- def run
- @ractor = Ractor.new(@id, @sock) do |id, sock|
+ def run(sock)
+ @ractor = Ractor.new(@id, sock, @handler) do |id, sock, handler|
+ logger = RightSpeed.logger
while conn = sock.accept
begin
- data = conn.read
- # TODO: process it
- logger.info "[read|#{id}] Data: #{data}"
- conn.write "200 OK"
- ensure
- conn.close rescue nil
+ handler.session(conn).process
+ # TODO: keep-alive?
+ Ractor.yield(conn, move: true) # to yield closing connections to ConnectionCloser
+ rescue => e
+ logger.error { "Unexpected error: #{e.message}\n" + e.backtrace.map{"\t#{_1}\n"}.join }
+ # TODO: print backtrace in better way
end
end
+ logger.info { "Worker#{id}: Finishing the Ractor" }
+ Ractor.yield(:closing) # to tell the outgoing path will be closed when stopping
end
end
def wait
- @ractor.take
+ # nothing to wait - @ractor.take consumes closed connections unexpectedly
+ # @ractor.wait ?
end
end
end
end