Всем доброе время суток. опять застопарился.
Есть клиент серверное приложение. Реализовано посредством TCP сервера и TCP клиента, обмен данными идёт dtStream. Клиентов более 500 компьютеров. И вот проблема в том что когда они разом подключаются, и одновременно несколько клиентов пересылают какие либо данные, приходит не понятные данные и порт виснет, и не перенимает больше сообщений. Если серверная часть и клиентские (50 шт тестовых) запущены на одном компе то всё норм, а если серверная установлена на другом компьютере (пробывал как на серваках так и на обычных компьютерах, при разных операционнках) то при подключении 50 тестовых клиентов и пересылки данных серверу порт сервера виснет (ошибок от TCP сервера не вызываются).
есть у кого соображения?
Этот топик читают: Гость
Ответов: 37
Рейтинг: 5
|
|||
карма: 0 |
|
Ответов: 37
Рейтинг: 5
|
|||
давно я сюда не заглядывал, делами был завален. но смотрю идей у людей 0 (
|
|||
карма: 0 |
|
Ответов: 8955
Рейтинг: 824
|
|||
Fidel, так люди своими идеями и делами заняты, где им до других идей
![]() |
|||
карма: 19 |
|
Ответов: 45
Рейтинг: 0
|
|||
Делай сегодня такую идею, что другие даже не думали что это возможно, а завтра эта идея жить будет так, как другие не смогут
![]() |
|||
карма: 0 |
|
Ответов: 845
Рейтинг: 19
|
|||
попробуй использовать
code_31510.txt я 5 тысяч за 1 раз запустил успешно
|
|||
карма: 0 |
| ||
файлы: 1 | code_31510.txt [146B] [204] |
Ответов: 37
Рейтинг: 5
|
|||
GAv, Ваш пример, отлично работает, но не совсем то что требовалось. В вашем примере пользователи подключаются и отсылают данные последовательно, а надо одновременно, и что бы клиент и серверная часть находились на разных компьютерах, для задержки передачи данных. И при таких условиях, порт виснет(
попробую приложить пример чуть попозже. ------------ Дoбавленo в 07.19: Всем привет. Короче всё оказалось совсем всё интересно. Поэтому решил всё написать небольшую историю, потомкам на будущее и разработчикам на заметку, так как считаю что ошибка в компонентах (по возможности перенесите тему в категорию "Ошибки компонентов"). Напомню о постановке задаче и о самой проблеме: Нужно было создать клиент серверное приложение, клиентов более 1000 шт. Решено было использовать TCP_Server и TCP_Client с DataType = dtStream, и Convertor для конвертации данных из dtStream в dtString. Клиенты должны отсылать кое какие данные на сервер, когда сервер становится не доступен, клиенты пытаются вновь подключиться. И вот возникла ошибка, когда все клиенты разом подключаются к серверу и отсылают данные после временной недоступности сервера, сервер воспринимает небольшое количество данных а потом виснет, хотя продолжает подключать к себе новых клиентов. Для того что бы понять суть проблемы решил написать тестовые программы. Клиентская программа эмитировала 3000 подключений и отсылала данные на сервер. Серверная часть:
Клиентская часть:
Для имитирования реальных условий, серверную часть программы нужно запускать после запуска 3000 клиентов, которые ждут доступности сервера, и при первой возможности, одновременно подключаться и отправят данные. Если запустить серверную и клиентскую часть на одном компьютере то всё нормально отрабатывает, все 3000 пользователей подключаются и присылают данные. Решено было клиентскую часть перенести на соседний компьютер, который находится в одной сети с основным компьютером. И вот тут та сработала ошибка, которая срабатывала в реальных условиях. Приходили первые данные от первых подключенных пользователях и после конвертации элементом Converter часть из них отображалось, после Convertor походу путался в очереди и выдавал непонятный символ и зависал, хотя остальные пользователи продолжали успешно подключаться и присылать данные. Началось стадия выяснения проблемы. Опытным путём было выявлено: что при DataType = dtString в TCP_Server и TCP_Client и соответственно без Convertor, всё отлично работает. Пример: Серверная часть DataType = dtString:
Клиентская часть DataType = dtString:
Далее было решено вернуть DataType = dtStream, так как того требовала основная задача. Далее заменил элемент в серверной части TCP_Server на TCP_ServerEx. Серверная часть TCP_ServerEx:
Клиентская часть аналогична из первого примера: И о чудо! Всё работает! Выявлено, что при условиях: 1) TCP_Server с DataType = dtStream; 2) TCP_Server + Convertor; 3) Работа через сеть. Возникает странная ошибка (как мне показалось зависание элемента Convertor). Хотя при использовании TCP_ServerEx вместо TCP_Server при таких же условиях ошибка не выдаётся и всё нормально функционирует. Ну так как причина выявлена можно переходить к применению знаний к основной программе, но тут возникла загвозка. Как в элементе TCP_ServerEx отправлять данные для всех пользователей и для определённых по IP адресу (где взять точки doSend и doSendByIp у TCP_ServerEx аналогичные TCP_Server)? Является ли точка doSend в компоненте TCP_Connection аналогом как у TCP_Server? Надеюсь разработчики обратят внимание на эти проблемы. Комментируйте, обсуждайте, жду предложений и подсказок. |
|||
карма: 0 |
|
Ответов: 45
Рейтинг: 0
|
|||
довольно таки интересно
![]() |
|||
карма: 0 |
|
Ответов: 3851
Рейтинг: 159
|
|||
Fidel, способы работы с TCP_ServerEx можно поискать по форуму (например мои посты ![]() BTW: memo имеет некоторые ограничения по объёму текста.. Fidel писал(а): Возникает странная ошибка (как мне показалось зависание элемента Convertor)P.S.: dtString (в TCP_Server) точно не подойдёт? |
|||
карма: 0 |
|
8