Asp Forum
Home
|
Login
|
Register
|
Search
Forums
>
comp.lang.ruby
Queue/IO blocking in threads
Martin Ceronio
3/3/2009 6:51:00 PM
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-...
.
1 Answer
Martin Ceronio
3/3/2009 7:14:00 PM
0
I am very sorry; I just realized that in the response_handler thread I
was writing to "socket" instead of "io". I was actually just trying to
present a simplification of the problem I am having with my real
project. Arrgh! Now to go sift through all the lines of code to see if I
can get the real thing to work...
--
Posted via
http://www.ruby-...
.
Servizio di avviso nuovi messaggi
Ricevi direttamente nella tua mail i nuovi messaggi per
Queue/IO blocking in threads
Inserendo la tua e-mail nella casella sotto, riceverai un avviso tramite posta elettronica ogni volta che il motore di ricerca troverà un nuovo messaggio per te
Il servizio è completamente GRATUITO!
x
Login to ForumsZone
Login with Google
Login with E-Mail & Password