tcpchan是一个TCP(de)多路复用器

tcpchan的Python项目详细描述


茶茶

PyPI version

TCPChan是一个TCP连接多路复用库,支持在单个TCP连接中使用多个通道。TCPChan可以通过消除连接设置的开销来提高短期连接的效率,特别是在高延迟链路(例如跨大陆链路)中。在

该库的核心部分与I/O库分离,因此可以携带自己的I/O库。为了方便起见,我们提供了一个基于Asyncio的协议实现,以便于与Asyncio应用程序集成。在

警告:TCPChan是为了好玩和教育目的而构建的,它没有经过充分测试,也没有被广泛部署。使用它的风险由你自己承担。在

指南

在制品

安装

通过Pip安装

pip install tcpchan

从GitHub安装最新版本 ^{pr2}$

依赖性

  1. python>;=3.7
  2. fpack>;=1.0.0

用法

在制品

频道

继承tcpchan.core.chan.Channel并实现data_received回调。在

fromtcpchan.core.chanimportChannelclassCustomChannel(Channel):defdata_received(self,data):# Do stuff upon data reception

连接

在服务器/客户机中建立连接后,创建ServerConnection或{}实例。把通道工厂送到连接处。在

创建服务器连接
fromtcpchan.core.connimportServerConnectionconn=ServerConnection(lambda:CustomChannel())
创建客户端连接
fromtcpchan.core.connimportClientConnectionconn=ClientConnection(lambda:CustomChannel())

事件

fromtcpchan.coreimport(HandshakeSuccess,DataTransmit,ChannelCreated,ChannelClosed)

异步

TCPChan提供了一个基于异步的协议实现,因此可以轻松地将TCPChan集成到异步应用程序中。在

对于服务器端应用程序,TCPChanServerProtocol可以使用,同样,对于客户端应用程序,TCPChanClientProtocol也可以使用。在

importasynciofromtcpchan.aioimportTCPChanServerProtocolfromtcpchan.core.chanimportChannelclassCustomChannel(Channel):defdata_received(self,data):# Do stuff upon data reception...classMyProtocol(TCPChanServerProtocol):def__init__(self,*args,**kwargs):super().__init__(*args,**kwargs)self._channels={}# Mapping for channelsdefhandshake_success(self):# Do something on handshake success...defhandshake_failed(self,reason):# Do something on handshake failure...defchannel_created(self,channel):# Do something on channel creationself._channels[channel.channel_id]=channeldefchannel_closed(self,channel_id):# Do something when a channel is closeddelself._channels[channel_id]loop=asyncio.get_event_loop()# To initialize `Protocol`, channel factory function is required.server=awaitloop.create_server(lambda:MyProtocol(lambda:CustomChannel()),host="localhost",port=9487,start_serving=True,)loop.run_forever()

许可证

BSD公司

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
Android上已连接音频输入设备的java列表   java是创建类的新对象还是使用静态方法?   Java:Shift/Rotate对象数组   Java Casting ArrayIterator<Object>   在java中返回布尔值时出错   无法确定文本文件读入程序(java)中的各种元素   Java Swing JToolBar   JAVAlang.IllegalStateException执行Ghost4J(Linux 32对64位)   jvm如何增加ubuntu系统的java堆化?   java CORS策略“AccessControlAllowOrigin”(Anguar 8和Servlet)   使用dagger 2的java视图依赖项注入   单元测试中RxJava的java模拟活动生命周期   arraylist中的Java打印字符串   java返回值显示为0.0。为什么会这样?   java是clientserver应用程序所必需的MVC吗?   ByteToMessageDecoder类中的java内存泄漏   java将大量文档写入firestore   GWT项目中的java TomcatMaven插件。两者之间的区别是什么:org。科德豪斯。魔咒和组织。阿帕奇。公猫maven插件   java swing:向JTree项添加自定义图形按钮