我正在尝试了解浏览器和Web服务器之间的tcp连接。我在我的本地计算机上运行了一个Web服务器,并且可以使用localhost:3000或127.0.0.1:3000按预期方式浏览到它。 (我正在运行“rails s”和WEBrick。)
我想在浏览器和Web服务器之间放置一个软件中介,因此开始尝试使用socat。以下工作正常:
socat TCP-LISTEN:8080,fork TCP:localhost:3000
我可以浏览到localhost:8080并且事情按预期工作。但是,如果我省略了“,fork”这样的参数,
socat TCP-LISTEN:8080 TCP:localhost:3000
本地rails网站在浏览器中看起来很破碎。
为什么需要fork参数?为什么浏览器不会< - >没有它的Web服务器连接工作?
答案 0 :(得分:26)
如果没有fork
,socat
将接受单个TCP连接,只要该连接保持打开,就会在两个端点之间双向转发数据,然后退出。您可以轻松地看到这一点:
socat
socat
实例。socat
不再监听新连接:它已经继续为已经获得的连接提供服务。socat
将在连接关闭时退出。 fork
选项只是让它分叉一个新子进程来处理新接受的连接,而父进程则返回等待新连接。
socat
使用fork()
而不是像preforking或连接池这样更复杂的东西是你不想用socat
实现高性能中间件的原因!