Twisted使实现自定义网络应用程序变得容易。下面是一个TCP服务器,它会回显写入它的所有内容:
来自twisted.internet导入协议、reactor、端点类回声(protocol.protocol):def dataReceived(自我,数据):self.transport.write(数据)类EchoFactory(protocol.Factory):def构建协议(self,addr):return回声()endpoints.serverFromString(reactor,“tcp:1234”).listen(EchoFactory())reactor.run()
了解有关的更多信息写入服务器,编写客户端和核心网络库,包括支持SSL、UDP、计划事件、单元测试基础设施等等。
Twisted包含一个事件驱动的web服务器。这是一个示例web应用程序;请注意资源对象是如何在内存中持久存在的,而不是在每次请求时重新创建的:
从twisted.web导入服务器,资源来自twisted.internet导入反应器,端点类计数器(resource.resource):isLeaf=真numberRequests=0def render_GET(自我请求):self.numberRequests+=1request.setHeader(b“content-type”,b“text/plain”)content=u“我是请求#{}\n”.format(self.numberRequests)return content.encode(“ascii”)endpoints.serverFromString(reactor,“tcp:8080”).listen(server.Site(Counter()))reactor.run()
了解有关的更多信息web应用程序开发,模板和扭曲'HTTP客户端.
这是一个简单的发布/订阅服务器,客户端可以在其中查看其他客户端发布的所有消息:
来自twisted.internet导入反应器、协议、端点从twisted.protocols导入基本类PubProtocol(basic.LineReceiver):定义__init__(自身,工厂):self.factory=工厂def connectionMade(自我):self.factory.clients.add(self)def connectionLost(自身,原因):self.factory.clients.remove(self)def lineReceived(自我,行):对于self.factory.client中的c:source=u“<{}>”.format(self.transport.getHost()).encode(“ascii”)c.sendLine(源+行)类PubFactory(protocol.Factory):定义__init__(自身):self.clients=设置()def构建协议(self,addr):return PubProtocol(自身)endpoints.serverFromString(reactor,“tcp:1025”).listen(PubFactory())reactor.run()
您可以通过打开两个终端并在每个终端中执行telnet localhost 1025,然后键入内容来测试这一点。
Twisted包含一个复杂的IMAP4客户端库。
导入系统来自twisted.internet导入协议,延迟,端点,任务从twisted.mail导入imap4从twisted.python导入失败异步定义主(reactor,username=“alice”,password=“secret”,strport=“tls:example.com:993”):endpoint=endpoints.clientFromString(reactor,strport)工厂=协议。Factory.forProtocol(imap4.IMAP4Client)尝试:client=等待endpoint.connect(工厂)等待client.login(username.encode(“utf-8”),密码编码(“utf-8”)等待客户端选择(“INBOX”)info=等待client.fetchEnvelope(imap4.MessageSet(1))打印(“第一封邮件主题:”,信息[1][“信封”][1])除:打印(“IMAP4客户端交互失败”)打印(failure.failure().getTraceback())task.react(lambda*a,**k:defer.ensureDeferred(main(*a,****k)),sys.argv[1:])
尝试一下,提供您的IMAP4用户名和应用程序密码(为gmail生成一个,为fastmail生成一个)、和客户端端点描述用于IMAP4服务器。您将看到邮箱中打印的第一封邮件的主题。
请参阅Twisted邮件文档以获取更多信息。
Twisted包括一个SSH客户端和服务器“conch”(即:Twisted Shell)。
导入系统,操作系统来自twisted.internet导入协议,延迟,端点,任务从twisted.concol.endpoints导入SSHCommandClientEndpoint异步定义主(reactor,username=“alice”,sshost=“example.com”,portno=“22”):envAgent=端点。UNIXClientEndpoint(reactor,os.environ[“SSH_AUTH_SOCK”])endpoint=SSHCommandClientEndpoint.newConnection(reactor,“echo‘hello world’”,用户名,sshost,int(portno),agentEndpoint=envAgent,)类ShowOutput(protocol.protocol):已收到=b“”def dataReceived(自我,数据):自接收+=数据定义连接丢失(自我,原因):已完成回调(self.received)finished=延迟。延期()工厂=协议。Factory.forProtocol(ShowOutput)await-endpoint.connect(工厂)打印(“SSH响应:”,等待完成)task.react(lambda*a,**k:defer.ensureDeferred(main(*a,****k)),sys.argv[1:])
您可以使用此客户端在任何SSH服务器上运行“hello world”您的本地SSH代理可以进行身份验证,如果您在命令行上输入用户名、主机名和可选的端口号。