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