ポート 9001 への複数の接続から読み取り、ポート 9000 の接続に書き出すサンプル コードを次に示します。XMPP、IRC、MSN などに対応する複数の「PutLine」実装が必要になります。
出力接続 PutLine を格納するためにグローバルを使用しましたが、代わりにこれを処理するより複雑な Factory オブジェクトを作成する必要があります。
#!/usr/bin/env python
from twisted.internet.protocol import Protocol, Factory
from twisted.internet.endpoints import clientFromString, serverFromString
from twisted.protocols.basic import LineReceiver
from twisted.internet import reactor
queue = []
putter = None
class GetLine(LineReceiver):
delimiter = '\n'
def lineReceived(self, line):
queue.append(line)
putter.have_data()
self.sendLine(line)
class PutLine(LineReceiver):
def __init__(self):
global putter
putter = self
print 'putline init called %s' % str(self)
def have_data(self):
line = queue.pop()
self.sendLine(line)
def main():
f = Factory()
f.protocol = PutLine
endpoint = clientFromString(reactor, "tcp:host=localhost:port=9000")
endpoint.connect(f)
f = Factory()
f.protocol = GetLine
endpoint2 = serverFromString(reactor, "tcp:port=9001")
endpoint2.listen(f)
reactor.run()
if __name__ == '__main__':
main()
テスト:
nc -l 9000
python test.py
nc 9001
任意の数の nc 9001 (または netcat 9001) から入力されたデータは、nc -l 9000 に表示されます。