![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Форумчанин
Регистрация: 04.07.2013
Сообщений: 118
|
![]()
Привет всем, вообщем у меня наблюдается следующая проблема, подключаются клиенты к моему серверу, и всё нормально, всё работает, только вот после 2-3 а то и больше часов работы вываливается ошибка на клиенте, вообще может кто скажет, клиент подключился к серверу, раз в 1 или 2 минуту будет отзываться что он подключен (что бы в случае обрыва связи у клиента сервер мог его корректно отсоединить), при нормальном отключении клиент сам уведомляет сервер что он уходит, может что то ещё нужно делать? вообще нормально если соединение постоянно открыто?
![]() |
![]() |
![]() |
![]() |
#2 | |||
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
![]() Цитата:
Цитата:
Цитата:
I'm learning to live...
|
|||
![]() |
![]() |
![]() |
#3 | |
Форумчанин
Регистрация: 04.07.2013
Сообщений: 118
|
![]()
Тут не множко не понял про пинг, я обычно делаю отправляю серверу допустим "101" и тот понимает что клиент ещё на связи и не отключает его или есть другой способ?
Цитата:
Ну просто читал, говорят нужно делать так: взял подключился отослал команду и отключился, но это ведь потеря скорости если так. Просто на какие грабли можно наступить при установке постоянно открытого соединения? |
|
![]() |
![]() |
![]() |
#4 |
Форумчанин
Регистрация: 04.07.2013
Сообщений: 118
|
![]()
у меня при долго открытом соединении на клиенте вылетала ошибка connection closed gracefully, по этому и спрашиваю может есть какие то нюансы?
|
![]() |
![]() |
![]() |
#5 | |||
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
![]() Цитата:
Цитата:
Создай простейший проект, попробуй подключиться - отключиться и снова подключиться. Цитата:
I'm learning to live...
|
|||
![]() |
![]() |
![]() |
#6 |
Форумчанин
Регистрация: 04.07.2013
Сообщений: 118
|
![]()
Ну вот же я и пробовал, подключился, отослал текст, сервер его принял ответил, клиент принял ответ. после отключаюсь на клиенте просто делаю Disconect, потом опять пробую подключиться к серверу сервер отвечает Already connections, но если перед отключением сообщаю какой нибудь командой серверу что я отключаюсь, например "exit" и сервер при получении этой команды отключает клиента методом AContext.Connection.Disconect тогда повторное подключение проходит нормально. Именно по этому мне кажется что индейцами это не предусмотрено.
Честно говоря я бы использовал сокеты, но как то пробовал, бывало такое что сообщения не доходят, либо доходят не полностью, либо местами поменялись команды, так и не разобрался я в них по этому перешел на TCP. |
![]() |
![]() |
![]() |
#7 |
Форумчанин
Регистрация: 19.08.2011
Сообщений: 329
|
![]()
5cek, загляните в аналогичную тему.
По своему опыту скажу, что Indy не самое лучшее решение для создания сервера (критикую за жирность, объемный код и замеченной нестабильности). В принципе, если одновременных клиентов не превышает порядка 30-50 лиц, то его вполне можно использовать. В ином случае не рекомендуется, так как создается вторичный слушающий поток. Даже не так страшно, что одновременных подключений будет, к примеру, 1000 (того 1000 потоков), и все же слабая машина может не потянуть (в зависимости от задачи). Также можете здесь ознакомиться более детально в самом принципе/алгоритме класса TIdTCPServer. Лично я как делал: писал на Winsock, главный слушающий сокет (в потоке) у меня был неблокирующим. Он же в свою очередь при подключении клиента создавал клиентский поток, который переводится в блокирующий режим. В плане производительности - замечательно. Разумеется, если одновременно подключится более 10 000 клиентов, то сервер может и помереть, но это все можно предусмотреть на свой вкус и цвет. |
![]() |
![]() |
![]() |
#8 |
Форумчанин
Регистрация: 04.07.2013
Сообщений: 118
|
![]()
Эх, да я и рад бы взять сокеты, да не смыслю в них не черта, самое что пугает меня в них то что сообщения могут прийти в разном порядке, а как следить за ними я даже понятия не имею, а клиентов предполагается до 2000, сервер не плохой стоит, на счет него я точно не беспокоюсь)
|
![]() |
![]() |
![]() |
#9 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
![]()
А обязательно корявый ТСР брать?
Может попробуешь IdHTTP или IdFTP? Они понадежнее будут. Я у себя их для тучи клиентов юзаю без проблем.
I'm learning to live...
|
![]() |
![]() |
![]() |
#10 | ||
Форумчанин
Регистрация: 19.08.2011
Сообщений: 329
|
![]()
Stilet, +1 (правда на счет IdHTTP не уверен).
Цитата:
Цитата:
Последний раз редактировалось Lardes; 14.01.2014 в 20:02. |
||
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
IdTCPServer и IdTCPClient | -=<_Makap_>=- | C++ Builder | 0 | 08.12.2012 18:41 |
Работа с IdTCPServer и IdTCPClient | rule-z | Работа с сетью в Delphi | 4 | 19.08.2011 07:58 |
События в idTCPServer и idTCPClient (Delphi) | _PROGRAMM_ | Помощь студентам | 3 | 11.11.2010 19:35 |
IdTcpClient и idTcpServer | xTANATOSx | Работа с сетью в Delphi | 9 | 17.05.2008 23:11 |
передача файла от idtcpclient к idtcpserver | SeЯgey | Работа с сетью в Delphi | 1 | 13.05.2008 11:21 |