class QuickML::Server
Public Class Methods
new(config)
click to toggle source
# File vendor/qwik/lib/qwik/ml-server.rb, line 28 def initialize (config) @config = config $ml_debug = true if @config.debug @status = :stop @logger = @config.logger @server = TCPServer.new(@config.bind_address, @config.ml_port) end
Public Instance Methods
shutdown()
click to toggle source
# File vendor/qwik/lib/qwik/ml-server.rb, line 46 def shutdown begin @server.shutdown rescue Errno::ENOTCONN p 'Already disconnected.' end @status = :shutdown end
start()
click to toggle source
# File vendor/qwik/lib/qwik/ml-server.rb, line 36 def start raise 'server already started' if @status != :stop write_pid_file(@config.ml_pid_file) @logger.log sprintf('Server started at %s:%d [%d]', 'localhost', @config.ml_port, Process.pid) accept @logger.log "Server exited [#{Process.pid}]" remove_pid_file(@config.ml_pid_file) end
Private Instance Methods
accept()
click to toggle source
# File vendor/qwik/lib/qwik/ml-server.rb, line 57 def accept running_sessions = [] @status = :running while @status == :running begin t = Thread.new(@server.accept) {|s| process_session(s) } t.abort_on_exception = true running_sessions.push(t) rescue Errno::ECONNABORTED # caused by @server.shutdown rescue Errno::EINVAL end running_sessions.delete_if {|t| t.status == false } if running_sessions.length >= @config.max_threads ThreadsWait.new(running_sessions).next_wait end end running_sessions.each {|t| t.join } end
process_session(socket)
click to toggle source
# File vendor/qwik/lib/qwik/ml-server.rb, line 78 def process_session (socket) begin c = @config session = Session.new(c, c.logger, c.catalog, socket) session.start rescue Exception => e @logger.log "Unknown Session Error: #{e.class}: #{e.message}" @logger.log e.backtrace end end