我有一个客户机-服务器系统,其中客户机需要派生一个子对象,并将其pid返回给服务器。在此之后,它必须保持与服务器的连接处于活动状态,通过该连接,它将继续向服务器发送有关该子进程的日志信息,以及它可能希望作为调试信息的一部分发送的其他请求。
我的问题是,如何才能做到这一点?我是否每次都要连接到服务器,向它发送pid并要求它记录请求,因为我可以让多个客户端同时向服务器发送请求,还是有其他方法可以做到这一点?
发布于 2009-09-17 20:45:30
你需要比现在更清楚地了解流程结构。服务器进程是否独立于客户端进程保持活动状态?它是否在侦听已知的端口号?客户端的第一个(父)进程何时连接到服务器?
您假设客户端派生一个子进程,然后让服务器知道子进程的PID。孩子是否也与服务器通信?它是打开到服务器的独立连接,还是抢占父进程的连接,还是子进程和父进程尝试共享到服务器的单个连接?如何协调单个连接上的访问?
这种系统的一种常见设置是:
这些连接有两种操作模式:
这两种模式都有效-它们对开销(如果每次连接都需要很长时间)和资源使用(持久连接占用服务器中的更多资源;客户端不会受到严重影响)有不同的影响。
发布于 2009-09-17 20:41:21
如果客户端和服务器之间没有带超时的有状态防火墙/NAT,则TCP连接将无限期持续,不需要发送任何数据。您可以设置一些套接字选项,这些选项将定期发送不包含任何数据的数据包(如果没有收到响应,则中断连接)-搜索SO_KEEPALIVE。
如果你谈论的是某个特定的超文本传输协议服务器,它可能有一个选项,允许一个没有任何请求的连接持续多长时间,例如apache中的KeepAliveTimeout。
https://stackoverflow.com/questions/1442603
复制相似问题