2009-09-18 2 views
1

У меня есть клиент-серверная система, где клиенту необходимо разветвить дочерний элемент и вернуть его обратно на сервер. После этого он должен поддерживать соединение с сервером, через которое он продолжает отправлять информацию о журнале сервера о ребенке и другие запросы, которые он может отправить в качестве части отладочной информации.Сохранять соединение после получения ответа от HTTP-сервера

Мой вопрос: как это можно сделать? Должен ли я каждый раз подключаться к серверу, отправлять его pid и запрашивать его для регистрации запроса [поскольку у меня может быть несколько клиентов, отправляющих запросы на сервер в одно и то же время), или есть ли другой способ сделать это?

+0

Что это связано с HTTP? –

ответ

2

Вам нужно быть более четким в отношении структуры процесса, чем вы сейчас. Поддерживает ли процесс сервера жизнь независимо от клиентских процессов? Слушает ли он известный номер порта? Когда первый (родительский) процесс на стороне клиента подключается к серверу?

Вы говорите, что клиент вилки ребенка, а затем сообщает серверу о дочернем PID. Связан ли ребенок с сервером? Открывает ли он независимое подключение к серверу или не выдает ли соединение родительского процесса или пытается ли дочерний и родительский сервер использовать одно соединение с сервером? Как вы координируете доступ к одному соединению?

Одна общая установка для такой системы:

  • Процесс сервера запускается как демон, который прослушивает на хорошо известном или заданный порт.
  • Начальный клиентский (родительский) процесс устанавливает соединение с сервером.
  • Процесс вторичного клиента (дочерний) отключает унаследованное соединение и устанавливает его собственное подключение к серверу.

Есть два режима работы для подключения:

  1. Клиент процессы открыть соединение, написать сообщение, возможно, ждать ответа, и закрыть соединение каждый раз. Это механизм, используемый веб-браузерами, потому что веб-сервер обеспечивает соединения без состояния.
  2. Клиент обрабатывает соединение и сохраняет его открытым (и сервер не закрывает соединение до тех пор, пока не возникнет чрезвычайная ситуация, или клиент соглашается (или просит) закрыть его. Этот механизм обычно используется клиентами базы данных, подключающимися к сервер базы данных.

Оба режима работы - они имеют разные последствия для накладных расходов (требуется длительное время, если вы подключаетесь каждый раз) и использования ресурсов (постоянные соединения используют больше ресурсов на сервере, клиенты не подвержены серьезному воздействию)

1

Если нет брандмауэров с состоянием/NAT с тайм-аутом между клиентом и сервером, соединение TCP будет длиться бесконечно, без каких-либо данных, которые необходимо отправить. Вы можете установить некоторые параметры сокета, которые будут периодически отправлять пакеты, не содержащие каких-либо данных (и разорвать соединение, если ответ не получен) - найдите SO_KEEPALIVE.

Если вы говорите о каком-то конкретном HTTP-сервере, у него, вероятно, есть опция для того, как долго разрешено соединение без каких-либо запросов, например. KeepAliveTimeout в apache.

 Смежные вопросы

  • Нет связанных вопросов^_^