2009-09-18 140 views
1

我有一个客户端 - 服务器系统,其中客户端需要fork一个孩子收到的响应之后,并返回其PID回服务器。在此之后,它必须保持与服务器的连接处于活动状态,通过该连接,服务器不断发送有关子服务器的服务器日志信息以及它可能希望作为调试信息一部分发送的其他请求。保持连接从HTTP服务器

我的问题是,如何才能做到这一点?我是否每次连接到服务器,发送pid并要求它记录请求[因为我可以有多个客户端同时向服务器发送请求],还是有其他方法可以执行此操作?

+0

这与HTTP有什么关系? – 2009-09-18 04:39:13

回答

2

您需要比目前更清楚过程结构。服务器进程是否独立于客户端进程保持活动状态?它在监听众所周知的端口号吗?客户端的第一个(父)进程何时连接到服务器?

你说客户端分出一个孩子,然后让服务器知道孩子的PID。孩子是否也与服务器通信?它是否打开与服务器的独立连接,或者是否抢占父进程的连接,或者是否尝试将子连接和父连接共享到服务器?你如何协调单一连接的访问​​?对于这样的系统

一个常见的设置是:

  • 服务器处理被启动为公知的或配置的端口上侦听守护程序。
  • 初始客户端(父)进程建立到服务器的连接。
  • 二级客户(子)进程断开连接继承并建立自己的连接到服务器。

有用于连接两种操作模式:

  1. 的客户端进程打开连接,写的消息,也许等待响应,每一次关闭连接。这是Web浏览器使用的机制,因为Web提供无状态连接。
  2. 客户端进程打开一个连接并保持打开状态(服务器在紧急情况或客户端同意(或请求)关闭连接之前不关闭连接。该机制通常由数据库客户端连接到数据库服务器

两种模式下工作 - 他们有架空不同的影响(需要很长的,如果你每次连接)和资源使用(持久连接使用了服务器更多的资源;客户不会受到严重影响)。

1

如果在客户端和服务器之间没有超时的状态防火墙/ NAT,TCP连接将无限期地持续,不需要发送任何数据。您可以设置一些套接字选项,定期发送不包含任何数据的数据包(如果未收到响应,则断开连接) - 搜索​​。

如果你正在谈论某个特定的HTTP服务器,它可能会有一个选项,允许连接在没有任何请求的情况下持续多久,例如, KeepAliveTimeout在apache中。