【发布时间】:2013-02-06 09:03:27
【问题描述】:
我们正在为网络服务器编写代理,而不是直接通过 TCP 连接,客户端程序将连接到本地 unix 域套接字以发送其数据,然后代理应用程序将通过 TCP 转发它。
我的问题是:应用程序通过 unix 域套接字发送的数据在代理接收之前是否越过内核边界?我问的原因是,如果是这样,我们可以期望看到使用 splice(2) 的好处。如果没有,我们不会。
【问题讨论】:
-
您能否更详细地描述您的架构?代理是否打算驻留在客户端主机上?我真的看不出接头/三通在这张照片中的位置。是将数据从客户端移动到代理还是从代理移动到 TCP?
-
当然可以。代理和客户端在同一台机器上。客户端应用程序将通过 unix 套接字使用普通的 write(2) 发送数据。然后,代理将该数据传递到远程服务器的 TCP 套接字。问题是,与使用 splice(2) 相比,如果代理使用 read(2) 和 write(2) 从本地套接字提取数据并将其传递到网络,我是否应该期望性能和 RSS 有明显不同把数据拿出来。