Сокеты и каналы

sokety i kanaly Сетевые сценарии

Итак, зачем вообще использовать сокеты для перенаправления? Проще говоря, для обеспечения независимости сервера и возможности использования в сети. Обратите внимание, что при использовании каналов не очевидно, кто должен называться «сервером», а кто «клиентом», потому что ни один из сценариев не выполняется непрерывно. Фактически, это один из основных недостатков использования каналов вместо сокетов в подобных ситуациях. Поскольку для использования каналов необходимо, чтобы одна программа порождала другую, каналы не могут использоваться для реализации взаимодействий с долгоживущими или удаленными серверами, как сокеты.

При использовании сокетов мы можем запускать клиенты и серверы независимо друг от друга, при этом серверы могут выполняться постоянно и обслуживать множество клиентов (хотя для этого придется внести некоторые изменения в функцию инициализации сервера в нашем вспомогательном модуле). Кроме того, возможность передачи имен удаленных компьютеров инструментам перенаправления в сокеты позволяет клиентам соединяться с серверами, выполняющимися на совершенно разных компьютерах. Как мы узнали в главе 5, именованные каналы (fifo) также обеспечивают независимость клиентов и серверов, но в отличие от сокетов они обычно могут применяться только в пределах локального компьютера и поддерживаются не всеми платформами. Поэкспериментируйте с этим программным кодом, чтобы лучше вникнуть в его суть. Попробуйте также изменить пример 12.11, чтобы вместо сервера или параллельно с сервером он запускал клиентские функции в дочернем процессе, с вызовами и без вызовов метода flush и с вызовом функции time.sleep в конце, чтобы отложить завершение. Применение операции запуска дочернего процесса может также повлиять на надежность данной реализации диалога через сокеты, но мы не будем углубляться в обсуждение этого вопроса в интересах экономии места.

Несмотря на необходимость заботиться о кодировании текста и решать проблему буферизации потоков ввода-вывода, вспомогательный модуль в примере 12.10 все равно представляет весьма интересное решение — операции ввода-вывода автоматически выполняются через сетевые или локальные соединения сокетов, а чтобы задействовать этот модуль, в обычные сценарии требуется внести минимум изменений. Во многих случаях этот прием может существенно расширить область применения сценариев.

В следующем разделе мы снова будем использовать метод makefile для обертывания сокета объектом, похожим на файл, чтобы обеспечить возможность построчного чтения с применением обычных приемов и методов текстовых файлов. Строго говоря, в этом нет большой необходимости — мы могли бы читать строки, как строки байтов с помощью метода recv сокета. Однако в целом метод makefile удобно использовать, когда желательно работать с сокетами, как с простыми файлами. Двинемся дальше, чтобы увидеть действующий пример.

Использованная литература:

Марк Лутц — Программирование на Python, 4-е издание, II том, 2011

Каталог сайтов Всего.ру
Оцените статью
Секреты программирования
Добавить комментарий