Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Python Twisted

Python Twisted

作者头像
py3study
发布于 2020-01-08 09:35:54
发布于 2020-01-08 09:35:54
93000
代码可运行
举报
文章被收录于专栏:python3python3
运行总次数:0
代码可运行

Twsited异步网络框架

Twisted是一个事件驱动的网络框架,其中包含了诸多功能,例如:网络协议、线程、数据库管理、网络操作、电子邮件等。

事件驱动

简而言之,事件驱动分为二个部分:第一,注册事件;第二,触发事件。

例:程序一

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#!/usr/bin/env python
# -*- coding:utf-8 -*-

# event_drive.py

event_list = []


def run():
    for event in event_list:
        obj = event()
        obj.execute()


class BaseHandler(object):
    """
    用户必须继承该类,从而规范所有类的方法(类似于接口的功能)
    """
    def execute(self):
        raise Exception('you must overwrite execute')

程序二,动用程序一

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#!/usr/bin/env python
# -*- coding:utf-8 -*-

from source import event_drive


class MyHandler(event_drive.BaseHandler):

    def execute(self):
        print 'event-drive execute MyHandler'


event_drive.event_list.append(MyHandler)
event_drive.run()
Protocols

Protocols描述了如何以异步的方式处理网络中的事件。HTTP、DNS以及IMAP是应用层协议中的例子。Protocols实现了IProtocol接口,它包含如下的方法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
makeConnection               在transport对象和服务器之间建立一条连接
connectionMade               连接建立起来后调用
dataReceived                 接收数据时调用
connectionLost               关闭连接时调用
Transports

Transports代表网络中两个通信结点之间的连接。Transports负责描述连接的细节,比如连接是面向流式的还是面向数据报的,流控以及可靠性。TCPUDPUnix套接字可作为transports的例子。它们被设计为“满足最小功能单元,同时具有最大程度的可复用性”,而且从协议实现中分离出来,这让许多协议可以采用相同类型的传输。Transports实现了ITransports接口,它包含如下的方法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
write                   以非阻塞的方式按顺序依次将数据写到物理连接上
writeSequence           将一个字符串列表写到物理连接上
loseConnection          将所有挂起的数据写入,然后关闭连接
getPeer                 取得连接中对端的地址信息
getHost                 取得连接中本端的地址信息

将transports从协议中分离出来也使得对这两个层次的测试变得更加简单。可以通过简单地写入一个字符串来模拟传输,用这种方式来检查。

例:EchoServer

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from twisted.internet import protocol
from twisted.internet import reactor

class Echo(protocol.Protocol):
    def dataReceived(self, data):   # 只要twisted已收到数据就会把数据返回
        self.transport.write(data)

def main():
    factory = protocol.ServerFactory()
    factory.protocol = Echo

    reactor.listenTCP(1234,factory)
    reactor.run()

if __name__ == '__main__':
    main()

EchoClient

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from twisted.internet import reactor, protocol

class EchoClient(protocol.Protocol):
    """Once connected, send a message, then print the result."""

    def connectionMade(self):     # 只要建立连接成功就会执行此方法
        self.transport.write("hello alex!")

    def dataReceived(self, data):  # 只要收到数据就会调用此方法
        "As soon as any data is received, write it back."
        print("Server said:", data)
        self.transport.loseConnection()  # 如果数据未传完则等数据传输完毕后再调用此方法connectionLost

    def connectionLost(self, reason):
        print("connection lost")

class EchoFactory(protocol.ClientFactory):
    protocol = EchoClient

    def clientConnectionFailed(self, connector, reason):   # 如果连接不上就会调用此方法
        print("Connection failed - goodbye!")
        reactor.stop()       # 连接失败则关闭

    def clientConnectionLost(self, connector, reason):   # 如果连接过程中断开则执行此方法
        print("Connection lost - goodbye!")
        reactor.stop()     # 连接中断关闭


# this connects the protocol to a server running on port 8000
def main():
    f = EchoFactory()
    reactor.connectTCP("localhost", 1234, f)
    reactor.run()

# this only runs if the module was *not* imported
if __name__ == '__main__':
    main()

运行服务器端脚本将启动一个TCP服务器,监听端口1234上的连接。服务器采用的是Echo协议,数据经TCP transport对象写出。运行客户端脚本将对服务器发起一个TCP连接,回显服务器端的回应然后终止连接并停止reactor事件循环。这里的Factory用来对连接的双方生成protocol对象实例。两端的通信是异步的,connectTCP负责注册回调函数到reactor事件循环中,当socket上有数据可读时通知回调处理。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/08/29 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
猫头虎分享:Python库 Twisted 的简介、安装、用法详解入门教程
今天猫头虎要和大家聊聊一个 Python 里非常强大、适合处理异步编程的库—— Twisted。很多粉丝都问过猫哥:如何在 Python 中处理复杂的异步网络请求?Twisted 就是答案之一。今天这篇文章会深入讲解它的安装、基本用法,并分享一些常见问题的解决方法。😉----
猫头虎
2024/10/17
6560
猫头虎分享:Python库 Twisted 的简介、安装、用法详解入门教程
python——客户端
twisted是一个设计非常灵活的框架,通过它可以写出功能强大的客户端,然而要在代码中使用非常多的层次结构。这个文档包括创建用于TCP,SSL和Unix sockets的客户端 在 底层,实际上完成协议语法和处理的是Protocol类。这个类通常是来自于twisted.internet.protocol.Protocol。大 多数的protocol handlers继承自这个类或它的子类。protocol类的一个实例将在你连接到服务器时被初始化,在断开连接时结束。这意味着持久的配置不会被保存 在Protocol中。 持久的配置将会保存在Factory类中,它通常继承自 twisted.internet.protocol.Factory(或者 twisted.internet.protocol.ClientFactory)。默认的factory类仅仅实例化Protocol,并且设置 factory属性指向自己。这使得Protocol可以访问、修改和持久配置。 Protocol 
py3study
2020/01/14
2.9K0
python——twisted
Twisted is an event-driven networking engine in Python. It was born in the early 2000s, when the writers of networked games had few scalable and no cross-platform libraries, in any language, at their disposal. The authors of Twisted tried to develop games in the existing networking landscape, struggled, saw a clear need for a scalable, event-driven, cross-platform networking framework and decided to make one happen, learning from the mistakes and hardships of past game and networked application writers.
py3study
2020/01/09
7200
再讲Python不能做游戏后端开发我揍你嗷!​ Twisted——基于事件驱动的Python网络框架
在大家知道阿巩做游戏后端开发后最常有的对话是:你转做C++了吗,我说是Python,然后对面意味深长的叹口气,哦~不过Python慢啊;性能不如静态语言;Python适合写写脚本巴拉巴拉……硬了,拳头硬了,于是就有了这个标题。
才浅Coding攻略
2022/12/12
1.3K0
再讲Python不能做游戏后端开发我揍你嗷!​ Twisted——基于事件驱动的Python网络框架
python中的twisted入门
Twisted是一个基于事件驱动的网络编程框架,专门用于构建可扩展、高性能和可靠的网络应用程序。它提供了丰富的网络协议和工具,可以实现客户端和服务器端的通信,支持TCP、UDP、SSL等协议。Twisted还具有异步编程的能力,能够处理大量并发连接而不会阻塞主程序。
大盘鸡拌面
2023/10/22
4610
3..Twisted学习
你不需要调用Twisted,Twisted会自己运行。reactor是Twisted的主循环,想python的其他主循环一样。每个Twisted只有一个reactor。一旦启动他就会不停的运行下去,响应一个又一个请求。
py3study
2020/01/20
5350
python twisted TCP通信 脚本
-------------------server-------------------
用户5760343
2022/05/14
7050
twisted高并发库transport函数处理数据包的些许问题
还是在学校时间比较多, 能够把时间更多的花在学习上, 尽管工作对人的提升更大, 但是总是没什么时间学习, 而且工作的气氛总是很紧凑, 忙碌, 少了些许激情吧。适应就好了.延续着之前对twisted高并
Ryan_OVO
2023/10/18
2400
twisted高并发库transport函数处理数据包的些许问题
python 网络框架twisted基础学习及详细讲解
twisted网络框架的三个基础模块:Protocol, ProtocolFactory, Transport.这三个模块是构成twisted服务器端与客户端程序的基本。 Protocol:Protocol对象实现协议内容,即通信的内容协议 ProtocolFactory: 是工厂模式的体现,在这里面生成协议 Transport: 是用来收发数据,服务器端与客户端的数据收发与处理都是基于这个模块 在windows中安装twisted需要先安装pywin32,自己去下载下就行。随后pip install twisted就会帮我们安装twisted以及zope。 我们结合一张图,以及一段程序来理解下twisted的基础实现:
Ryan_OVO
2023/10/18
9300
python 网络框架twisted基础学习及详细讲解
python twisted 客户端服务端通信
from twisted.internet import reactor from twisted.internet.protocol import Protocol, Factory
用户5760343
2022/05/14
1K0
python twisted deferredlist用法
from twisted.internet import reactor,defer,protocol
用户5760343
2022/05/14
2190
python twisted 建立一个简单连接tcpConnection
from twisted.internet import reactor,protocol
用户5760343
2022/05/14
3270
异步IO\数据库\队列\缓存
到目前为止,我们已经学了网络并发编程的2个套路, 多进程,多线程,这哥俩的优势和劣势都非常的明显,我们一起来回顾下
hankleo
2020/09/17
4.4K0
异步IO\数据库\队列\缓存
python twisted详解2
转载:作者:dave@http://krondo.com/slow-poetry-and-the-apocalypse/ 译者:杨晓伟(采用意译) from twisted.internet import reactor reactor.callWhenRunning(funcname) reactor.run()
用户5760343
2022/05/14
2890
python 初次使用twisted
[root@centos python]# python twisted_check_tcp_port.py 127.0.0.1:80
py3study
2020/01/06
6530
如何使用Twisted Deferred周期性地调用
在 Twisted 中,Deferred 是一个用于处理异步操作结果的对象。当你想周期性地执行一个异步任务时,可以使用 LoopingCall,它结合了 Twisted 的事件循环来周期性地调用一个函数,并返回一个 Deferred 对象。
华科云商小徐
2025/02/05
740
python twisted diferred使用
Deferred 可以按照这种方式说明:可能你在饭店中遇到过这个问题,如果你在等待自己喜欢 的桌子时,在一旁哼哼小曲。带个寻呼机是个好主意,它可以让你在等待的时候不至于孤零 零的站在那里而感到无聊。你可以在这段时间出去走走,到隔壁买点东西。当桌子可用时, 寻呼机响了,这时你就可以回到饭店去你的位置了。 一个Deferred 类似于这个寻呼机。它提供了让程序查找非同步任务完成的一种方式,而在这 时还可以做其他事情。当函数返回一个Deferred 对象时,说明获得结果之前还需要一定时间。 为了在任务完成时获得结果,可以为Deferred 指定一个事件处理器。 1、Deferred.callback,,,,,,,Deferred.errorback 当调用一个可以返回Deferred 的函数时,使用Deferred.addCallback 方法指定返回结果时调 用的函数。使用Deferred.addErrback 方法指定执行发生异常时调用的函数。 2 from twisted.internet import reactor,defer,protocol
用户5760343
2022/05/14
2510
python twisted 回调函数
from twisted.internet.protocol import Protocol, ClientFactory
用户5760343
2022/05/14
7770
python-网络编程
  socket 的原意是“插座”,在计算机通信领域,socket 被翻译为“套接字”,它是计算机之间进行通信的一种约定或一种方式。通过 socket 这种约定,一台计算机可以接收其他计算机的数据,也可以向其他计算机发送数据。
yaohong
2020/06/19
1.4K0
python-网络编程
Python 中实现聊天客户端库
在 Python 中实现一个简单的聊天客户端库可以通过使用 socket 模块来处理网络通信。我们可以构建一个基于 TCP 的简单聊天系统,其中包括一个服务器和一个客户端。
华科云商小徐
2024/08/02
1480
相关推荐
猫头虎分享:Python库 Twisted 的简介、安装、用法详解入门教程
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验