Не происходит отключение у клиента. Сервер клиента отключает, но onDisconnect у клиента не происходит.
Ну и повторно нельзя подключиться к серверу пока вручную у клиента не сделаешь disoconnect. Как бороть?
code_35510.txt
Этот топик читают: Гость
Ответов: 655
Рейтинг: 18
|
|||
карма: 0 |
| ||
файлы: 1 | code_35510.txt [1.2KB] [660] |
Ответов: 4628
Рейтинг: 749
|
|||
Событие отключения может сработать только если включено ожидание данных (AutoReceiving=True или doStartReceiving) или отключение обнаружено по ошибке при отправке данных.
Конкретно в данном случае там в коде стоит такая заглушка: если событие onReceive не подключено, то и ожидание данных нет смысла включать. Вот и получился такой побочный эффект. То-есть, достаточно вцепить Memory/DoData на выход onReceive. То же самое касается сервера. |
|||
карма: 26 |
|
Ответов: 655
Рейтинг: 18
|
|||
Netspirit, так в схеме же как раз AutoReceiving=True.
п.с. а почему после отключения клиента сервером клиент повторно не подключается? ------------ Дoбавленo в 11.08: Все разобрался. |
|||
карма: 0 |
|
Ответов: 655
Рейтинг: 18
|
|||
В шапке последняя версия компонентов?
|
|||
карма: 0 |
|
Ответов: 4628
Рейтинг: 749
|
|||
Публичная - да. Сейчас тестирую новую, полностью переработанную версию.
|
|||
карма: 26 |
|
Ответов: 4628
Рейтинг: 749
|
|||
Видео для затравки:
http://depositfiles.com/files/rejsru6zl Редактировалось 1 раз(а), последний 2018-09-05 11:40:24 |
|||
карма: 26 |
| ||
Голосовали: | halt |
Ответов: 2059
Рейтинг: 132
|
|||
карма: 6 |
| ||
файлы: 1 | code_35560.txt [1.8KB] [477] |
Ответов: 4628
Рейтинг: 749
|
|||
[offtop]flint2, ну ты прям целую лекцию прочитал Музыка - предполагалось, можно в плеере отключить. Файлообменник - rghost.net что-то не хочет принимать, а из платных dfiles - не самый геморройный.[/offtop]
|
|||
карма: 26 |
|
Ответов: 2059
Рейтинг: 132
|
|||
[offtop]Не сердись.
Я так, к слову. Меня 21 год дрессировали этому, вот и замечаю всё. Даже "Магазин на диване" и подобное на телевидении критикую, когда они не профессионально делают. Издержки бывшей профессии. А компоненты хорошие. Ничего не скажешь. P.S. Любая критика полезна, как и все трудности в жизни, которые нас не убивают.[/offtop] |
|||
карма: 6 |
|
Ответов: 209
Рейтинг: 1
|
|||
Netspirit, не умею сливать из таких сервисов. Расскажи в вкратце какие ништяки ждут публику ? ))
|
|||
карма: 0 |
|
Ответов: 4628
Рейтинг: 749
|
|||
Пробуй отсюда: http://www.uafile.org/539532
|
|||
карма: 26 |
| ||
Голосовали: | Net2Com |
Ответов: 4628
Рейтинг: 749
|
|||
Выложена обновленная версия компонентов
Изменения 1) Более экономное использование параллельных потоков сервером и клиентом 2) Убраны свойства параметров задержки приема, точка Socket 3) Добавлено свойство OverSend 4) Убран 3 пункт из свойства AsyncEvents. Свойство может принимать значения True, False. Внимание: перед установкой компонентов в существующих схемах, в которых AsyncEvents=All, нужно установить это свойство в значение AsyncEvents=Receive. Либо после установки открыть схему блокнотом и заменить AsyncEvents=2 на AsyncEvents=1. Иначе будет ошибка среды при работе со схемой. 5) В сервере точка CurIPAddress заполняется только на момент событий onClientConnect и onEnumClients 6) onDisconnect происходит также при отключении клиента по doDisconnect/doClose/doCloseAll 7) Полностью переработан внутренний код компонентов, по ходу могли быть исправлены ошибки (или добавлены новые ) Технические подробности Предыдущие версии использовали следующий подход при работе с соединениями: на каждое входящее подключение сервер создавал один поток для приема данных. При асинхронной отправке для каждого соединения также создавались по одному потоку, отправляющему данные. Если к примеру у сервера есть 500 подключений, то у приложения было запущено 502 потока (на каждое соединение + поток, ожидающий новых подключений, и главный поток). Если пользователь выполнил бы метод doSendAllAsync, создавалось ещё 500 потоков для отправки. Это был самый простой способ реализации компонентов, но неэффективный. В новой версии используются менеджеры прослушивания и отправки. Теперь для приема входящих данных создаётся один поток на каждые 64 соединения. Тогда на 6400 соединений будет всего 100 потоков. Для отправки данных также используется один поток на группу соединений. Максимальное количество потоков отправки жестко задано в коде (в данный момент 5). Таким образом независимо от количества соединений в сервере методы doSendAllAsync и doSendAsync запустят не более 5 потоков. Небольшой минус - поскольку каждый поток отправляет данные своим соединениям последовательно в цикле, то задержка отправки в одном из соединений затормозит отправку и остальным из данного потока. Все экземпляры серверов и клиентов в одном приложении пользуются общими потоками приема и отправки. Кроме того, если раньше потоки создавались на каждую отправку, что было крайне неэффективно, то сейчас поток не останавливается сразу после завершения отправки, а выжидает некоторое время следующих вызовов. |
|||
карма: 26 |
| ||
Голосовали: | flint2, Konst, Net2Com |
Ответов: 655
Рейтинг: 18
|
|||
Netspirit,
5) В сервере точка CurIPAddress заполняется только на момент событий onClientConnect и onEnumClients -а при поступлении данных от клиента?? 6) onDisconnect происходит также при отключении клиента по doDisconnect/doClose/doCloseAll т.е. теперь не нужно вешать Memo на onReceive? В новой версии используются менеджеры прослушивания и отправки. Теперь для приема входящих данных создаётся один поток на каждые 64 соединения. Тогда на 6400 соединений будет всего 100 потоков. Для отправки данных также используется один поток на группу соединений. Максимальное количество потоков отправки жестко задано в коде (в данный момент 5). можно для себя сделать 20 соединений на 1 поток и количество потоков увеличить с 5 до 15? или в "жестко при жестко зашито в коде"? |
|||
карма: 0 |
|
Ответов: 4628
Рейтинг: 749
|
|||
Gunnman писал(а): а при поступлении данных от клиента?Gunnman писал(а): т.е. теперь не нужно вешать Memo на onReceive?Gunnman писал(а): можно для себя сделать 20 соединенийРедактировалось 2 раз(а), последний 2018-11-12 12:20:52 |
|||
карма: 26 |
|
Ответов: 655
Рейтинг: 18
|
|||
Netspirit, по CurIpAdress я понял) перепутал с CurClientID, ночная работа, мозги заплыли)
По поводу onDisconnect чуть выше на данной странице я спрашивал почему не происходит onDisconnect (схема там тоже имеется), вы сказали: Netspirit писал(а): Конкретно в данном случае там в коде стоит такая заглушка: если событие onReceive не подключено, то и ожидание данных нет смысла включать. Вот и получился такой побочный эффект. То-есть, достаточно вцепить Memory/DoData на выход onReceive. То же самое касается сервера.Вот я и спросил, требуется ли на обновленных компонентах "Memory/DoData на выход onReceive" или нет? |
|||
карма: 0 |
|