使用 perl 的 Net::Server 处理 STDIN/STDOUT

Handling STDIN/STDOUT with perl's Net::Server

我正在尝试构建一个基于 perl 的服务器,它将接受传入的请求,并根据该请求将 read/write 数据发送到服务器的 STDIN/OUT。所以我需要从客户端 STDIN 接受数据,将其写入服务器的 STDIN(由另一个进程处理),从服务器的 STDOUT 捕获该请求的结果,然后将其发送给客户端。

我希望从 Net::Server 构建它,但我无法弄清楚如何将数据专门定向到服务器的 STDIN。在我的理想世界中,我有一组文件句柄,如 CLISTDIN、CLISTDOUT、SRVSTDIN 和 SRVSTDOUT,我可以单独处理和管理它们。在 Net::Server 中,我只是不知道如何去做。

我不必使用 Net::Server 所以欢迎其他建议。 Net::Server 还有一些我想使用的其他功能。

感谢您的任何见解。

您是否考虑过只使用 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-keygen设置ssh自动登录ip检查~/.ssh/authorized_keys这里就不多说了)

原来我可以通过重载 post_accept 来改变 STDIN/STDOUT 的使用方式来做到这一点。我能够创建两个不同的文件句柄,这样我就可以在不破坏服务器 IO 的情况下引用客户端 IN/OUT。也就是说,Net::Server 一直妨碍 IO 想要做的事情,所以我放弃了它,只是推出了我自己的分叉服务器。最终整体变得更容易。