![]() |
|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 16.05.2008
Сообщений: 17
|
![]()
Новая тема - так новая тема
![]() Попытался протестировать на максимум входящих подключений к серверу, а их теоритически может быть до 100 000. Написал программку со списком клиентов, которые согласно указанному количеству создаються динамически... Попытка создать 2048 сокетов - дает число сокетов в пределах 1400 - 1800 штук на один порт. Причем! подключиться к другому порту удаётся, но обмена данными нет уже не по одному сокету. Попытки создать большее число сокетов приводит к заморозке программки со списком клиентов, после чего она закрывается без каких либо сообщений об ошибке. Весь день рылся в и-нете, но вразумительного ответа так и не нашёл. Вопросы: 1. На что распростроняется это ограничение, на входящие или исходящие соединения, или и те и другие суммарно? 2. Можно ли это ограничение снять, например в реестре? Использую: Delphi 7, IdTCPServer из Indy 10, Windows XP Pro Sp2, Pentium M64, RAM 2048Gb, без файла подкачки. После запуска сервера и тестовой программки с клиентами: свободной памяти - полно, процессор загружен менее чем на 1% |
![]() |
![]() |
![]() |
#2 |
Пользователь
Регистрация: 16.05.2008
Сообщений: 17
|
![]()
А под отладчиком сервер говорит out of memory...
![]() |
![]() |
![]() |
![]() |
#3 |
Новичок
Джуниор
Регистрация: 18.01.2008
Сообщений: 1,720
|
![]()
vynt, как организовано копирование сокета? Если по потоку на клиент, то очень много потоков создать не получится. Плюс расходы пула на сокеты и сами потоки и т.д.
|
![]() |
![]() |
![]() |
#4 |
Пользователь
Регистрация: 16.05.2008
Сообщений: 17
|
![]()
Так ведь Indy же... конечно, поток на каждого клиента.
Похоже придётся таки создовать свой движок для сокетов. Через ..IoCompletionPort наверное. Примерчик бы какой посмотреть, знает кто и где, а? Очень нужно чтобы была возможность подключения такого количества сокетов, и без разрыва соединений т.к. прием/передача происходит редко, но, может неожиданно потребоваться связь с клиентом... |
![]() |
![]() |
![]() |
#5 |
Новичок
Джуниор
Регистрация: 18.01.2008
Сообщений: 1,720
|
![]()
Я никогда не работал с Indy, поэтому и уточняю.
![]() --------------- P.S. Не знаю, правда, как это стыкуется с Indy... ![]() |
![]() |
![]() |
![]() |
#6 |
Пользователь
Регистрация: 16.05.2008
Сообщений: 17
|
![]()
А можно вместо Thread использовать Fiber? Там можно явно указать размер стека, в отличии от первого...Правда работать с "нитями" мне пока не приходилось.
Indy - на данный момент обеспечивает наибольшую стабильность, количество и качество, из уже 5-7 испытанных альтернативных компонентов... Есть в Indy и безпоточный сервер (только принимает подключения). Хотелось бы конечно найти/иметь готовый компонент с необходимой функциональностью |
![]() |
![]() |
![]() |
#7 |
Новичок
Джуниор
Регистрация: 18.01.2008
Сообщений: 1,720
|
![]()
А это ничего особенного не даст, только добавит головной боли, например, с синхронизацией. К тому же для "обычных" потоков тоже можно указывать размер стэка. Только ни к чему это всё, Вы же сами уже нашли лучшее решение. Работайте в направлении completion ports. Да и зачем Вам какие-то компоненты искать? Там кода получитсястрок на сто максимум.... Ещё раз повторю, не работал с Indy и не могу сказать, возможно там всё это уже реализовано...
|
![]() |
![]() |
![]() |
#8 |
Пользователь
Регистрация: 16.05.2008
Сообщений: 17
|
![]()
Попробовал через select() - те же яйца только в профиль!
![]() Щас попытаюсь с completion ports. (Знал бы мой шеф, чем я занимаюсь с компьюетром...) А на счёт сокетов в потоке - значит ли то, что они "привязаны" к объёму памяти, что с её увеличением можно будет создать большее количество сокетов? Перекладывать на плечи юзеров свои проблемы не красиво, но временно можно ![]() |
![]() |
![]() |
![]() |
#9 |
Новичок
Джуниор
Регистрация: 18.01.2008
Сообщений: 1,720
|
![]() |
![]() |
![]() |
![]() |
#10 |
Пользователь
Регистрация: 16.05.2008
Сообщений: 17
|
![]()
Таааак. Вот проблема, с completion ports, а как определить что клиент отключился? (или лучше уже в новую тему?)
|
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Помогите оценить, сколько может стоить проект. Его покупают - сколько взять? | grenles | Свободное общение | 4 | 16.07.2008 09:38 |
Помогите подключиться к серверу. | КривойПрограммист | Помощь студентам | 1 | 27.10.2007 23:41 |
Сервер и несколько клиентов | Andr | Работа с сетью в Delphi | 10 | 17.09.2007 09:24 |
Как подключиться к серверу используя API функции? | BR17UY | Win Api | 3 | 16.04.2007 02:12 |
Создать список клиентов банка | Klyan | Паскаль, Turbo Pascal, PascalABC.NET | 3 | 15.01.2007 12:45 |