Threads can work, but most networking code I've written uses
Kernel#select.  It's an incredibly powerful, yet somewhat hard to
master, method that allows you to read and write on many sockets
(actually IO objects) at the same time.  It sounds like you want two
read objects, one for the server and one for the database, and that
you want to write to the network socket (yes, can you can read and
write to the same socket - just use "puts" as well as "gets", or
whatever equivalent methods you like) in the part of the code that
handles what happens when the database socket is ready to be read.

http://www.rubycentral.com/book/ref_m_kernel.html#Kernel.select

HTH,

Adam

On Tue, Nov 4, 2008 at 1:49 AM, Gin Mendi <gin18em / hotmail.com> wrote:
> Hi,
>
> I'm trying to learn Ruby and Socket programming. So far I managed to
> find some tutorials about Ruby and Socket programming and have made
> really simple applications like a Time server sending the time to a
> client. Now I wanted to try something a little more advanced. I want to
> make a client that will connect to server and receive messages and at
> the same time send messages to the server when certain events happen
> like when there's a file in a certain directory or a record in the
> database.
>
> So far from the tutorials I've studied, the clients all just wait for a
> response from the server. From what I understand once I do a gets I'll
> just be waiting for a reponse and will put the rest of the state waiting
> on that response. Is it possible to do both reading and writing on the
> socket at the same time?
>
> I also did some digging on threads. I had the idea of making 2 threads
> one to receive messages from the server and one to check the
> directory/database then send a message. Again I don't see though how I
> can do that based on what I done in the tutorials. It seems like my
> threads will just hang when I try to read from the server. Is this the
> proper approach? Are there other methods aside from using threads? I saw
> topic on a multiplexing server but all the examples were just waiting
> again on a read from the client.
>
> I know these are pretty broad questions and topics but hoping someone
> can help clarify these issues and point me at the right direction.
>
> Thanks!
> --
> Posted via http://www.ruby-forum.com/.
>
>