From: Martin Ceronio Date: 2009-03-04T03:51:09+09:00 Subject: Queue/IO blocking in threads I am coding a client/server in which requests and responses are handled on the client and server side by threads communicating with Queues (because several sessions will share one connection to the server). In the code below, I expect the client and server to exchange the same message indefinitely, but between reading the queues and IO, it blocks somewhere. it doesn't get further than printing the first request. require 'gserver' require 'socket' require 'zlib' require 'yaml' class ConnectionHandler def initialize(io) queue = Queue.new request_handler = Thread.new do loop do req = io.gets("__EOF__").chomp("__EOF__") puts "client request: #{req}" queue << "speak your request, my child" end end response_handler = Thread.new do loop do res = queue.pop socket << res << "__EOF__" end end request_handler.join response_handler.join end end class MyServer < GServer def initialize(port=10001, *args) super(port, *args) end def serve(io) ConnectionHandler.new(io) end end # Start the server server = MyServer.new server.audit = true server.start # Here follows the client implementation: socket = TCPSocket.new('localhost', 10001) cqueue = Queue.new request_processor = Thread.new { loop do req = cqueue.pop socket << req << "__EOF__" end } response_processor = Thread.new { loop do res = socket.gets("__EOF__").chomp("__EOF__") puts "server response: #{res}" cqueue << "enquiring minds want to know" end } # This message will start off the conversation cqueue << "can i speak freely?" server.join request_processor.join response_processor.join -- Posted via http://www.ruby-forum.com/.