事件处理驱动器, 开发者只需要开发单线程部分的工作, 多线程交给Twisted处理器。索引不需要考虑线程安全了。
服务端代码:
from twisted.internet import protocol
from twisted.internet import reactor
SERVER_PORT = 8080
class Server(protocol.Protocol):
def connectionMade(self):
print('客户端的地址: %s' % self.transport.getPeer().host)
def dataReceived(self, data):
print('服务端接收到数据 %s' % data.decode('utf-8'))
self.transport.write(('[echo] >: %s' % data.decode('utf-8')).encode('utf-8'))
class DefaultServerFactory(protocol.Factory):
protocol = Server
def main():
reactor.listenTCP(SERVER_PORT, DefaultServerFactory())
print('服务端等待客户端连接...')
reactor.run()
if __name__ == '__main__':
main()
客户端代码:
from twisted.internet import protocol
from twisted.internet import reactor
SERVER_HOST = 'localhost'
SERVER_PORT = 8080
class Clinet(protocol.Protocol):
def connectionMade(self):
print('客户端连接成功')
self.send()
def send(self):
input_data = input('输入内容>>>')
if input_data:
self.transport.write(input_data.encode('utf-8'))
else:
self.transport.loseConnection()
def dataReceived(self, data: bytes):
print(data.decode('utf-8'))
self.send()
class DefaultClientFactory(protocol.ClientFactory):
protocol = Clinet
clinetConnectionLost = clientConnectFaild = lambda self, connector, reson: \
reactor.stop()
def main():
reactor.connectTCP(SERVER_HOST, SERVER_PORT, DefaultClientFactory())
reactor.run()
if __name__ == '__main__':
main()
可以启动多个客户端检测twisted并发操作。