Что более переносимо в Perl, сокетах или именованных каналах (fifos)? - PullRequest
1 голос
/ 30 марта 2011

Я пишу некоторый Perl-код. Я хочу, чтобы он работал на Windows и Linux / UNIX / OSX. Пока что он работает на * NIX и использует fifos.

Я рассматриваю возможность переключения на сокеты, чтобы избежать проблемы, связанной с тем, что POSIX :: mkfifo () не работает в Windows, поэтому мне нужно написать отдельный код для использования Win32 :: Pipe.

Я чувствую двойственное отношение ко всему этому. Мне кажется, что оба исправления требуют примерно одинакового объема работы. Это хорошая идея, чтобы переключиться на розетки?

Ответы [ 4 ]

3 голосов
/ 31 марта 2011

Краткий ответ: IO :: Socket :: INET работает как в Windows, так и в * NIX.

Именованные каналы

  • Немного проще быстро написать код.Вам не нужно писать код подключения.
  • Чуть быстрее.Сокеты накладываются на TCP и устанавливают начальное соединение.
  • Работает на всех платформах.
  • Работает, даже если сетевой карты не существует.Некоторые ноутбуки отключают сетевую карту для экономии энергии, что может помешать работе даже локальных розеток.

Сокеты

  • Работает на всех платформах.Однако некоторые ноутбуки отключают сетевую карту для экономии энергии, и даже локальные сокеты не будут работать, если нет сетевого интерфейса.
  • Более переносимый в Perl.IO :: Socket :: INET работает как в * NIX, так и в Windows.
  • Позволяет вести отдельный разговор с каждым клиентом.
  • Брандмауэры не являются проблемой.Порты свыше 1024 должны работать.

Лично я решил переключиться на розетки.В моем приложении это не имеет большого значения.Но я думаю, что это делает код немного проще, дает мне гибкость для перехода на> 1 клиента в будущем, и я все равно хочу изучать IO :: Socket.

2 голосов
/ 30 марта 2011

LWP :: socket отлично работает в Windows и * NIX.Если вы выберете сокеты более пятнадцати, то в конечном итоге вы сможете взаимодействовать с процессами Windows и * NIX.Может быть, вам это не нужно сегодня, но кто знает.

2 голосов
/ 30 марта 2011

Ответ более общий (т. Е. Он не специфичен для Perl):

Для такого рода действий в Windows по сравнению с остальным миром почти всегда требуется отдельный код для Windows по сравнению со всем остальным. Практически во всем остальном есть хорошие решения для таких вещей, как сокеты файлов Unix или FIFO или ... Тогда в Windows вы должны вернуться к сокетам.

ИМХО, правильное решение - использовать правильное решение для окон, которое не является сетевыми сокетами, потому что это открывает приложение для проблем безопасности. Так что во всем остальном «делайте это правильно», а затем в Windows вместо этого используйте сетевые сокеты. Но , убедитесь, что при выборе маршрута сетевого сокета вы должны по крайней мере использовать только локальные сокеты (т. Е. Привязанные к 127.0.0.1).

Для perl, я бы соблазнился поискать в CPAN класс, который уже сделал этот универсальный. Но ... я не удивлюсь, если ничего не будет.

1 голос
/ 30 марта 2011

IIRC, более поздние версии Perl имеют работающую пару сокетов в Windows.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...