У нас есть сервер приложений, разработанный на Delphi 2010 и Indy 10. Этот сервер получает более 50 запросов в секунду и работает хорошо.Но в некоторых случаях мне кажется, что Инди очень неясен.Их компоненты хороши, но иногда я копался в исходном коде только для того, чтобы понять простую вещь.В Инди не хватает хорошей документации и хорошей поддержки.
Последнее, с чем я столкнулся, было для меня большой проблемой: я должен определить, когда клиент отключается незаметно (например, когда происходит сбой или завершение работы клиента.сервер, который он отключит) и инди не смог этого сделать.Если я этого захочу, мне придется разработать алгоритм, такой как heartbeat, pooling или TCP keep-alive.Я не хочу проводить больше времени, выполняя, по крайней мере, компонентную работу.После нескольких исследований я обнаружил, что это не ошибка Indy, но это проблема всех компонентов блокирующих сокетов.
Теперь я действительно думаю об изменении ядра Сервера на другой хороший набор.Я должен признать, что я склонен использовать неблокирующий сокет.Исходя из этого, у меня есть несколько вопросов:
- Какая польза от перехода от блокирующих к неблокирующим сокетам?
- Смогу ли я обнаруживать разъединения клиента (без изящества)?
- Какой набор компонентов имеет лучший продукт?Под лучшим продуктом я имею в виду: быстрая, хорошая поддержка, хорошие инструменты и простота реализации.
Я знаю, что это должен быть субъективный вопрос, но я действительно хочу услышать это от вас.Мой первый вопрос - тот, который мне важнее всего.Мне все равно, если я должен платить 100, 500, 1000, 10000 долларов, но я хочу полное решение.Сейчас я думаю о IP * работах .
РЕДАКТИРОВАТЬ
Я думаю, что некоторые парни не понимают, что я хочу.Я не хочу создавать свой собственный сокет.Я давно работаю с розетками и устаю от этого.Действительно.
И неблокирующие розетки МОГУТ обнаружить отсоединения клиента.Это факт, и он имеет хорошую документацию по всему Интернету.Неблокирующий сокет постоянно проверяет состояние сокета на наличие новых входящих данных и позволяет обнаружить, что сокет недействителен.Это не алгоритм сердцебиения.Алгоритм сердцебиения используется на стороне клиента и периодически отправляет на сервер пакеты (также известные как keep-alive), чтобы сообщить, что он еще жив.
РЕДАКТИРОВАТЬ
Яне ясно.Возможно, потому что английский не мой основной язык. Я не говорю, что можно обнаружить потерянное соединение, не пытаясь отправить или получить данные из сокета.Я хочу сказать, что каждый неблокирующий сокет может это сделать, потому что они постоянно пытаются читать из сокета новые входящие данные. Почему это так сложно понять?Если вы, ребята, загружаете и запускаете демонстрационные версии ip * works, в частности, echoserver и echoclient (оба используют TCP), вы можете протестировать их самостоятельно.Я уже проверил это, и он работает так, как я ожидал.Даже если вы используете старые TCPSocketServer и TCPSocketClient в неблокирующем режиме, вы поймете, что я имел в виду.