我正在尝试构建一个基于Perl的服务器,该服务器将接受传入的请求,并基于该请求将数据读/写到服务器的STDIN / OUT。因此,我需要接受来自客户端STDIN的数据,将其写入服务器的STDIN(由另一个进程处理),从服务器的STDOUT捕获该请求的结果,然后将其发送到客户端。
我希望从Net :: Server上构建它,但是我一生无法解决如何将数据专门定向到服务器的STDIN。在理想的世界中,我将拥有一组文件句柄,例如CLISTDIN,CLISTDOUT,SRVSTDIN和SRVSTDOUT,我可以分别对其进行寻址和管理。我只是不知道如何在Net :: Server中进行操作。
我不必使用Net :: Server,因此欢迎其他建议。 Net :: Server仅具有我想使用的许多其他功能。
感谢您的见解。
答案 0 :(得分:1)
您是否考虑过仅使用ssh
?使用ssh,您可以在远程计算机(服务器)上运行命令,该命令会将您的stdin重定向到该命令,并将stdout从该命令重定向到您的命令。简单的演示:
$ 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/authorized_keys
设置ip进行ip检查以进行自动登录的ssh)
答案 1 :(得分:0)
结果证明,我可以通过重载post_accept来更改STDIN / STDOUT的使用方式。我能够创建两个不同的文件句柄,因此可以在不破坏服务器IO的情况下引用客户端IN / OUT。就是说,Net :: Server一直阻碍着IO想要做的事情,所以我放弃了它,只是推出了自己的分支服务器。最终变得更容易。