чистый сокет модуль Python - PullRequest
       7

чистый сокет модуль Python

2 голосов
/ 14 августа 2010

Модуль сокетов в Python обертывает модуль _socket, который является реализацией языка Си. Кроме того, socket.socket будет принимать параметр _sock, который должен реализовывать интерфейс _socket. В некоторых отношениях _sock должен быть фактическим экземпляром базового типа сокета из _socket, поскольку код C выполняет проверку типов (в отличие от чистого python).

Учитывая, что вы можете передать сокетоподобный объект для _sock, похоже, что вы могли бы написать эмулятор сокета, который вы могли бы передать в socket.socket. Это должно было бы эмулировать поведение основного сокета, но в памяти, а не в реальной сети или чем-то еще. В противном случае он не должен отличаться от _socket.

Что потребуется для создания такого типа эмуляции?

Я знаю, я знаю, это не очень практично. На самом деле, я усвоил трудный путь, что использовать обычные сокеты было проще, а поддельные сокеты были не нужны. Я думал, что у меня будет лучший контроль над тестовой средой с поддельными сокетами. Независимо от того, сколько времени я «потратил впустую», я обнаружил, что в процессе узнал много о сокетах и ​​о питоне.

Я предполагал, что любое решение должно быть набором взаимодействующих объектов, таких как:

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)

Кажется, что это в основном то, что происходит с настоящими сокетами, за исключением реальной сети вместо поддельной (плюс сокеты уровня ОС) и _socket вместо FakeSocket.

В любом случае, просто для удовольствия, есть идеи, как к этому подойти?

Кстати, с помощью FakeSocket вы могли бы делать что-то похожее на сокеты в Google Apps ...

1 Ответ

3 голосов
/ 14 августа 2010

Это уже сделано. Twisted широко использует это для модульных тестов своих реализаций протокола. Хорошей отправной точкой было бы рассмотрение некоторых из тестов Twisted .

По сути, вы просто позвоните makeConnection по протоколу с транспортом, который не подключен к реальному сокету. Супер просто!

...