I need to write a gateway server that forwarding data between client and data server¡£I use a Protocol instance for incoming connection from client, and creating another Protocol instance to connect data server when received data from client:
Exp.1
...
Class ToClientProtocol(Protocol):
""" Protocol for incoming connection from client. """
def connectionMade(self):
self.data_server = reactor.connectTCP('localhost', 8888, DataServerFactory()) # make connection to data server
self.data_server.transport.write('hello!') # send a message to data server, but not work
...
The connetion to data server can be made, BUT the data server received nothing. self.data_server.transport.write() not work.
It will work if I write like that:
Exp. 2
...
Class ToClientProtocol(Protocol):
""" Protocol for incoming connection from client. """
def connectionMade(self):
self.data_server = reactor.connectTCP('localhost', 8888, DataServerFactory(self)) # make connection to data server
Class DataServer(Protocol):
""" Protocol for connection to data server. """
def __init__(self, client):
self.client = client
def connectionMade(self):
self.client.data_server.transport.wirte('hello!') # send message to data server, it's work now!
Class DataServerFactory(self):
def __init__(self, client):
self.client = client
def buildProtocol(self, addr):
return DataServer(self.client)
...
I don't think this is the best way. Why I can't simply wirte like Exp.1?