![]() |
|
Модераторы: Snowy, Poseidon, MetalFan |
![]()
|
|
| Dmitry_177 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 418 Регистрация: 22.9.2006 Репутация: нет Всего: нет |
Подскажите пожалуйста, есть сервер, есть клиент, клиент запрашивает у сервера какую-то определенную информацию, а сервер отвечает ему, и так много раз, сколько это будет запрашивать пользователь.. У меня это сделано все в одном TCP соединении, т.е. сервер постоянно в ожидании новых запросов от клиента(это и часами может быть, т.е. пока клиентская часть работает).. А потом при закрытии клиентской части, он шлет серверу специальное сообщение чтобы сервер закрыл свой сокет, созданный для клиента и клиент закрывает сокет.. Подскажите пожалуйста может лучше сделать так: при каждом запросе клиента у сервера, устанавливать заново соединение, а по завершению выполнения запроса, т.е. когда сервер уже ответил клиенту на его запрос, рвать это соединение, и так каждый раз при новом запросе?
Мне еще интересно вот к примеру браузеры не так ли делают? Т.е. открывают запрошенную html-страницу в интернете и рвут соединение с сервером, а при переходе по ссылке на какую-то другую страницу заново браузер соединяется с сервером и т.д.? |
|||
|
||||
| _hunter |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 5 Всего: 98 |
Браузеры делают запрос, получают страницу и рвут соединение. легко посмотреть любым (нормальным) файрволом.
-------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
| Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 53 Всего: 484 |
Не факт. Это протокол 1.0, а 1.1 держит соединение некоторое время.
Если проходит определённый таймаут бездействия, то соединение разрывается. |
|||
|
||||
| drkot |
|
|||
![]() Ищущий ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1042 Регистрация: 5.5.2006 Репутация: 0 Всего: 8 |
а в чем собственно вопрос? можно и так и так от твоего желания и немного от специфики задачи 1.0 тоже соединение не рвет если его попросить. имхо: отличия 1.0 и 1.1 в возможности использования инструкции connect при соединении через прокси. -------------------- Ошибка не становится истиной по причине широкого распространения, как и Истина не становится Ошибкой из-за того, что никто её не видит. |
|||
|
||||
| Dmitry_177 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 418 Регистрация: 22.9.2006 Репутация: нет Всего: нет |
Я это спрашиваю как вообще лучше делать, ведь я и так и так могу реализовать.. Но: я конечно понимаю что если постоянно будет связь то время обработки запроса будет быстрее, но и при этом ИМХО больше ресурсов тратится, да еще к тому же нужно постоянно проверять на связи ли клиент, если нет то сервер должен закрыть сокет да и DOS атаки тоже возможны..=) А при каждом запросе если соединяться, а потом разъединяться, ИМХО лучше, т.к. никаких проверок ненужно и по надежней будет такая схема..
Добавлено через 2 минуты и 22 секунды Вы можете еще сказать то что смотря с какой периодичностью будет клиент посылать такие запросы, если раз в час то и смысле нету постоянно держать соединение.. Вы знаете, это все будет зависеть от пользователя, как он будет с программой работать.. |
|||
|
||||
| drkot |
|
|||
![]() Ищущий ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1042 Регистрация: 5.5.2006 Репутация: 0 Всего: 8 |
ИМХО смысл такой:
если связь "односторонняя" (клиетн управляет сервером, веб, почта) то приемлемо эпизодическое соединение. если связь "двусторонняя" (ICQ, skype) то однозначно нужно постоянное соединение. как таковых способов проверки нет. этот механизм реализован на уровне протокола и степеней свободы там не много. -------------------- Ошибка не становится истиной по причине широкого распространения, как и Истина не становится Ошибкой из-за того, что никто её не видит. |
|||
|
||||
| Dmitry_177 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 418 Регистрация: 22.9.2006 Репутация: нет Всего: нет |
Можно посылать контрольный пакет, на который обратная сторона должна ответить.. =)
|
|||
|
||||
| drkot |
|
|||
![]() Ищущий ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1042 Регистрация: 5.5.2006 Репутация: 0 Всего: 8 |
-------------------- Ошибка не становится истиной по причине широкого распространения, как и Истина не становится Ошибкой из-за того, что никто её не видит. |
|||
|
||||
| Dmitry_177 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 418 Регистрация: 22.9.2006 Репутация: нет Всего: нет |
через определенное время каждый раз посылается определенный пакет, на который обратная сторона должна немедленно ответить.. если небыло ответа то выключаем соединение..
можно еще и так: клиент каждые допустим 5 мин шлет определенный пакет, это и означает "я еще на связи".. если время вышло и от клиента не пришел очередной пакет, то закрываем соединение.. можно еще что-нибудь придумать.. ксати у меня книга есть: "эффективное использование TCP", как-то так вобщем называется, там разобран этот случай и многого другого интересного есть.. если кто хочет могу прислать |
|||
|
||||
![]()
|
| Правила форума "Delphi: Сети" | |
|
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делится вскрытыми компонентами
Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Snowy, Poseidon, MetalFan. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Сети | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |