ThreadingTCPServer, asyncore and Client-to-Client communication

D

Dustin

I've been trying to create a "byte streaming server", it's basically a
chat server, but I'd like to use it for transfering large amounts of
data between two connected clients. Sounds simple enough, but I'm
having a difficult time implementing it.

If Client #1 connects, then that thread is consumed with listening for
data from that client. If Client #2 connects, that client is on a
different thread, and therefore I don't see how I can have data sent
from Client #1 to be streamed down to Client #2. (and how can client
process #1 accept data from client #2 because it's listening to client
#1?) Obviously I'm missing something.

I've looked at asyncore/asynchat, as well as ThreadingTCPServer... but
there's something I'm missing. Is there a simple way to have an
object listen over two ports, and what comes into one port will be
sent down the another?

Any advice, or a good swift kick in the right direction would be
appreciated.
Dustin
 
B

Bryan Olson

Dustin wrote:
[...]
> If Client #1 connects, then that thread is consumed with listening for
> data from that client. If Client #2 connects, that client is on a
> different thread, and therefore I don't see how I can have data sent
> from Client #1 to be streamed down to Client #2. [...]
> I've looked at asyncore/asynchat, as well as ThreadingTCPServer... but
> there's something I'm missing. Is there a simple way to have an
> object listen over two ports, and what comes into one port will be
> sent down the another?

Yes; look up the select module in the standard library (on which
asyncore is built).

Also, note that sockets are not bound to a single thread. If
you don't want to use select, you might have one thread that
reads from socket x and writes to socket y, and another thread
that reads from y and write to x. Some perfectly reasonable
systems have a reading thread and a writing thread for each
socket.
 
G

G. S. Hayes

I've been trying to create a "byte streaming server", it's basically a
chat server, but I'd like to use it for transfering large amounts of
data between two connected clients. Sounds simple enough, but I'm
having a difficult time implementing it.

investigate os.select; you don't even need multiple threads for this operation.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,733
Messages
2,569,439
Members
44,829
Latest member
PIXThurman

Latest Threads

Top