纯python套接字模块

时间:2010-08-14 02:30:45

标签: python sockets emulation

python中的套接字模块包装了_socket模块,这是C实现的东西。同样,socket.socket将采用必须实现_sock接口的_socket参数。在某些方面,_sock必须是来自_socket的底层套接字类型的实际实例,因为C代码进行类型检查(与纯python不同)。

鉴于您可以为_sock传入类似套接字的对象,看起来您可以编写一个可以传递给socket.socket的套接字模拟器。它需要在内存中模拟底层套接字行为,而不是在真实网络或任何东西上。它不应与_socket区别开来。

构建此类仿真需要什么?

我知道,我知道,这不是非常实用。事实上,我学到了很难使用常规套接字更容易,并且不需要假套接字。我以为我可以更好地控制带有假套接字的测试环境。无论我“浪费”的时间,我发现在这个过程中我学到了很多关于套接字和python的知识。

我猜测任何解决方案都必须是这样的交互对象的堆栈:

something_that_uses_sockets (like XMLRPCTransport for ServerProxy)
    |
    V
socket.socket
    |
    V
FakeSocket
    |
    V
FakeNetwork
    |
    V
FakeSocket ("remote")
    |
    V
socket.socket
    |
    V
something_else_that_uses_sockets (like SimpleXMLRPCServer)

看起来这基本上是真正的套接字,除了真正的网络而不是假网络(加上OS级套接字),而_socket代替FakeSocket。

无论如何,只是为了好玩,有关如何处理这个问题的想法吗?

很明显,使用FakeSocket,您可以在Google Apps中执行类似套接字的操作......

1 个答案:

答案 0 :(得分:3)

已经完成了。 Twisted广泛用于其协议实现的单元测试。一个好的起点将是some of Twisted's unit tests

实际上,您只需使用未连接到真实套接字的传输在协议上调用makeConnection。超级简单!

相关问题