Обработка STDIN / STDOUT с помощью perl's Net :: Server - PullRequest
0 голосов
/ 05 октября 2018

Я пытаюсь создать сервер на основе Perl, который будет принимать входящие запросы и на основе этого запроса читать / записывать данные в STDIN / OUT сервера.Поэтому мне нужно принять данные от клиентского STDIN, записать их в STDIN сервера (где они обрабатываются другим процессом), записать результаты этого запроса из STDOUT сервера и затем отправить их клиенту.

Я надеялся построить это на Net :: Server, но я не могу понять, как себя перенаправить, специально для данных на STDIN сервера.В моем идеальном мире у меня был бы набор файловых дескрипторов, таких как CLISTDIN, CLISTDOUT, SRVSTDIN и SRVSTDOUT, к которым я мог бы обращаться по отдельности и управлять ими.Я просто в растерянности, как это сделать в Net :: Server.

Мне не нужно использовать Net :: Server, поэтому приветствуются другие предложения.Net :: Server просто имеет ряд других функций, которые я хотел бы использовать.

Спасибо за понимание.

Ответы [ 2 ]

0 голосов
/ 11 октября 2018

Оказывается, я мог бы сделать это, перегрузив post_accept, чтобы изменить способ использования STDIN / STDOUT.Мне удалось создать два отдельных файловых дескриптора, чтобы я мог обращаться к клиенту IN / OUT, не нарушая IO серверов.Тем не менее, Net :: Server продолжал мешать тому, что хотел сделать IO, поэтому я отказался от него и просто развернул свой собственный сервер разветвления.В итоге все стало проще.

0 голосов
/ 06 октября 2018

Думали ли вы просто об использовании ssh?С помощью ssh вы можете запускать команды на удаленном компьютере (сервере), который перенаправляет ваш стандартный ввод на эту команду, а стандартный вывод этой команды - на ваш.Простая демонстрация:

$ echo "hello, world" | md5sum
22c3683b094136c3398391ae71b20f04  -

$ echo "hello, world" | ssh myserver.com md5sum
22c3683b094136c3398391ae71b20f04  -

Или

$ echo "hello, world" | ssh user@myserver.com "/path/any/command --with --args x y z"

(Вы можете настроить ssh для автоматического входа с проверкой ip с помощью ssh-keygen и ~/.ssh/authorized_keys, здесь больше об этом не скажешь)

...