2009-09-18 146 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中。