Commit e3d2c8d6 authored by David Wilson's avatar David Wilson

issue #49: update howitworks.rst for command line change

parent db9bec87
...@@ -26,20 +26,26 @@ implement the decompression. ...@@ -26,20 +26,26 @@ implement the decompression.
Python Command Line Python Command Line
################### ###################
The Python command line sent to the host is a base64-encoded copy of the The Python command line sent to the host is a :mod:`zlib`-compressed and
:py:meth:`mitogen.master.Stream._first_stage` function, which has been base64-encoded copy of the :py:meth:`mitogen.master.Stream._first_stage`
carefully optimized to reduce its size. Prior to base64 encoding, function, which has been carefully optimized to reduce its size. Prior to
``CONTEXT_NAME`` is replaced with the desired context name in the function's compression and encoding, ``CONTEXT_NAME`` is replaced with the desired context
source code. name in the function's source code.
.. code:: .. code::
python -c 'exec "xxx".decode("base64")' python -c 'exec "xxx".decode("base64").decode("zlib")'
The command-line arranges for the Python interpreter to decode the base64'd The command-line arranges for the Python interpreter to decode the base64'd
component and execute it as Python code. Base64 is used since the first stage component, decompress it and execute it as Python code. Base64 is used since
implementation contains newlines, and many special characters that may be to protect against any special characters that may be interpreted by the system
interpreted by the system shell in use. shell in use.
Compression may seem redundant, however it is basically free and reducing IO is
always a good idea. The 33% / 200 byte saving may mean the presence or absence
of an additional frame on the network, or in real world terms after accounting
for SSH overhead, up to 2.3% reduced chance of a stall during connection setup
due to a dropped frame.
Forking The First Stage Forking The First Stage
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment