Примеры в этом разделе иллюстрируют основную роль сокетов как механизма IPC, но они не дают полного представления о практической ценности сокетов. Несмотря на то, что они могут работать лишь со строками байтов, совсем не трудно вообразить области возможного их применения. Приложив небольшие усилия, например:
• Через сокеты можно передавать произвольные объекты Python, такие как списки и словари (или, по крайней мере, их копии), сериализуя их в строки байтов с помощью модуля pickle, который был представлен в главе 1 и подробно рассматривается в главе 17.
• Как мы увидим в главе 10, стандартный поток вывода сценария можно перенаправить в окно графического интерфейса, подключив поток вывода сценария к его сокету, который задействован в графическом интерфейсе в неблокирующем режиме.
• Программы, загружающие произвольный текст из Интернета, могут читать его в виде строки байтов через сокеты и декодировать вручную, используя имена кодировок, встроенные в заголовки content—type или непосредственно в теги самих данных.
• Интернет в целом можно рассматривать, как область применения сокетов — как мы увидим в главе 12, в самом конце, электронная почта, FTP и веб-страницы — это просто форматированные строки байтов, доставляемые через сокеты.
Плюс любые другие ситуации, когда необходимо организовать обмен данными между программами, — сокеты являются универсальным, переносимым и гибким инструментом. Например, они могут играть ту же роль, что и каналы fifo в примере с графическим интерфейсом для отладчика, приведенным выше, но при этом сокеты могут использоваться в Windows и позволили бы даже подключать графический интерфейс к отладчику, выполняющемуся на другом компьютере. В силу этого они оцениваются многими как более мощный инструмент IPC.
Повторю еще раз, что вы должны рассматривать этот раздел лишь как краткий обзор. Более полный охват сокетов подразумевает знакомство с сетевыми концепциями, поэтому мы отложим более детальное изучение API сокетов до главы 12. Кроме того, мы встретимся с сокетами в главе 10, где будем исследовать возможность перенаправления потоков ввода-вывода графического интерфейса, о которой говорилось выше, и познакомимся с различными дополнительными областями их применения в части книги, посвященной программированию для Интернета. В четвертой части, например, мы будем использовать сокеты для передачи целых файлов и создадим более надежные серверы, порождающие потоки выполнения или процессы для обмена данными с клиентами, чтобы избежать ситуации отказа в обслуживании. А теперь, продолжая тему этой главы, перейдем к еще одному, последнему инструменту IPC, — к сигналам.
Использованная литература:
Марк Лутц — Программирование на Python, 4-е издание, I том, 2011