gpt4 book ai didi

tcp - 为什么 socat 在连接到 Web 服务器时需要 "fork"?

转载 作者:可可西里 更新时间:2023-11-01 02:29:51 25 4
gpt4 key购买 nike

我正在尝试了解浏览器和网络服务器之间的 tcp 连接。我有一个在我的本地机器上运行的网络服务器,并且可以像预期的那样使用 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 参数是必要的?为什么没有它浏览器 <--> 网络服务器连接就不能工作?

最佳答案

如果没有 forksocat 将接受单个 TCP 连接,只要该连接保持打开状态,就会在两个端点之间双向转发数据,然后退出。您自己可以很容易地看到这一点:

  • 在一个终端窗口中运行socat
  • 在另一个终端窗口中远程登录到本地主机 8080。它连接到 socat 实例。
  • 在第三个终端窗口中远程登录到本地主机 8080。您收到连接被拒绝的错误,因为 socat 不再监听新连接:它已开始为已经获得的连接提供服务。
  • 在第二个终端窗口中输入 HTTP 请求。您将收到一个 HTTP 响应,然后 socat 将在连接关闭时退出。

fork 选项只是让它派生一个新的子进程来处理新接受的连接,而父进程返回等待新的连接。

socat 使用 fork() 而不是像 preforking 或连接池这样更复杂的东西是你不想用 实现高性能中间件的原因socat!

关于tcp - 为什么 socat 在连接到 Web 服务器时需要 "fork"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9596594/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com