Модуль сокетов в 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 ...