有多个客户端程序定期连接到我服务器上的一个端口并发送一行文本。
建立到端口的连接后,我需要启动一个处理数据的 PHP CLI 脚本。可能有许多远程脚本或多或少同时运行/连接,所以我认为最好让 socat 为每个连接分叉一个进程来运行脚本。
我已经让 socat 完成我需要的大部分工作,使用命令
socat tcp-l:myport,fork exec:mypath/socatTest.php
我可以读取 php://stdIn 上的输入。一切都很好。
问题是这个过程似乎没有 fork,所以如果第二个外部程序发送数据而另一个正在做同样的事情,它会得到一个连接被拒绝的错误。
我哪里出错了?
不使用socat
为什么不使用 PHP 来侦听该套接字并处理您的信息?如果您查看socket_accept,您将在下面看到一些关于侦听套接字并为多个客户端分叉该进程的示例。这里还有另一个例子——custom-web-proxy-is-better-to-fork-process-or-make-http-requests
关于socat
首先,从未使用过socat。所以这完全基于对文档的审查。所以从我在这里的文档中可以看出,无论如何都
exec:<command-line>
应该分叉一个过程。似乎您不需要在选项中明确说明。你以前让这个工作过吗?