基于simpy的异步网络。

simpy.io的Python项目详细描述


simpy.io是一个基于SimPy的异步网络库。自然 网络是完全基于事件的(例如,可以考虑消息 作为事件)。simpy.io与 异步输入和输出。

它提供了几个抽象级别(原始套接字、数据包和 请求回复消息),支持各种后端((e)poll、select、asyncore, 并允许您使用不同的套接字类型,如TCP、SSL加密, 模拟的)。此外,还有http、websockets和可扩展rpc等协议 也支持接口。

当前状态

simpy.io目前处于开发的早期alpha阶段。没有 保证API的稳定性(模块几乎肯定会在 1.0版本)和simpy.io可能会在您的系统上崩溃。可悲的是,没有 目前可用的文档(除了示例和测试)。

各个模块的状态如下:

  • 套接字:稳定的alpha
  • 数据包:稳定的alpha
  • 消息:稳定的alpha
  • http:draft
  • websockets:draft
  • rpc:draft

下表表示支持矩阵。到现在为止,没有ci 系统到位,保证了测试的稳定性。

SystemFlavorPythonBackendsSuccessful tests
LinuxArchLinux2.6.9, 2.7.6, 3.3, 3.4allall
LinuxUbuntu (12.04)2.6.9, 2.7.6, 3.3allmost
WindowsWindows 72.6.9, 2.7.6, 3.3selectall
OS XMaverick (10.9)3.3no epollmost

注意

python 2本身并不支持simpy的所有特性(例如不支持 异常链或生成器内部的返回语句),但解决方法 有空。

安装

simpy.io需要python 2.7或3.3和simpy 3。您可以从安装 通过PIP的位桶:

$ pip install hg+https://bitbucket.org/simpy/simpy.io

示例

以下三个示例演示simpy.io的抽象级别:

插座水平

直接使用simpy.io套接字时,可以尝试readwrite 从套接字或到套接字的指定字节数(注意 从操作系统保证接收或传输所有数据:

>>>fromsimpy.ioimportselectasbackend>>>>>>defserver(env,addr):...server_sock=backend.TCPSocket.server(env,addr)...sock=yieldserver_sock.accept()...data=yieldsock.read(4)...print(data.decode())...yieldsock.write('cya'.encode())>>>>>>defclient(env,addr):...sock=backend.TCPSocket.connection(env,addr)...yieldsock.write('ohai'.encode())...data=yieldsock.read(3)...print(data.decode())>>>>>>addr=('127.0.0.1',5555)>>>env=backend.Environment()>>>srv=env.process(server(env,addr))>>>cli=env.process(client(env,addr))>>>env.run(until=cli)ohaicya

数据包级别

simpy.io数据包减轻了原始套接字的限制,并允许您读取 写完整的数据包。这些可以是字节(如果使用Packet) 或(unicode)字符串(如果使用PacketUTF8):

>>>fromsimpy.ioimportselectasbackend>>>fromsimpy.io.packetimportPacket>>>>>>defserver(env,addr):...server_sock=backend.TCPSocket.server(env,addr)...sock=yieldserver_sock.accept()...packet=Packet(sock)...data=yieldpacket.read()...print(data.decode())...yieldpacket.write('cya'.encode())>>>>>>defclient(env,addr):...packet=Packet(backend.TCPSocket.connection(env,addr))...yieldpacket.write('ohai'.encode())...data=yieldpacket.read()...print(data.decode())>>>>>>addr=('127.0.0.1',5556)>>>env=backend.Environment()>>>srv=env.process(server(env,addr))>>>cli=env.process(client(env,addr))>>>env.run(until=cli)ohaicya

消息级别

消息级别添加允许您异步发送的消息计数器。 消息(甚至同时)和映射对其正确请求的答复。 此外,您可以指定(反)序列化程序(默认情况下,使用json)和 回复可以表示成功/失败:

>>>fromsimpy.ioimportselectasbackend>>>fromsimpy.io.packetimportPacketUTF8>>>fromsimpy.io.messageimportMessage>>>>>>defserver(env,addr):...server_sock=backend.TCPSocket.server(env,addr)...sock=yieldserver_sock.accept()...message=Message(env,PacketUTF8(sock))...request=yieldmessage.recv()...print(request.content)...yieldrequest.succeed('cya')>>>>>>defclient(env,addr):...message=Message(env,PacketUTF8(...backend.TCPSocket.connection(env,addr)))...reply=yieldmessage.send('ohai')...print(reply)>>>>>>addr=('127.0.0.1',5557)>>>env=backend.Environment()>>>srv=env.process(server(env,addr))>>>cli=env.process(client(env,addr))>>>env.run(until=cli)ohaicya

帮助和联系

请随时向SimPy-Users mailing list留言询问 寻求帮助或讨论正在进行的开发。虫子应该贴在我们的 issue tracker这里是比特桶。

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

推荐PyPI第三方库


热门话题
java开始为Android开发应用程序   在哪种情况下,c++/c#namespace方法比Java方法更好?   java重构帮助。。。基于属性的对象还是大量成员字段?   java如何使用jackon json将嵌套对象作为字符串的对象转换为Pojo?   java是流式传输远程日志文件的有效方法   javajackson数据绑定:读入现有对象   java NullPointerException这是如何发生的?   java需要伪代码来进行文本压缩/解压缩   java JMS Websphere消息在发送时丢失   JUnit测试的Java SVNKit模拟单元测试   java Apache Crunch错误   java如何修复Android Studio/SQLite中的“空对象引用”错误?   java文件“navigation.json”在Android Studio项目中找不到   java如何在同一实体类上建立单向的一对一关系?   java调用web服务:javax。网ssl。SSLException:收到致命警报:协议\u版本   java与sql的连接   java Android:通过编程为透明背景图标(png)生成阴影,并在ImageButton中使用