![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Вопрос про TServerSocket [D5, D6, D7, Win95/98, WinME, Win2k, WinXP]
Интересующийся © (2006-02-07 05:13:00)Подскажите плиз!
Может кто уже сталкивался с подобным вопросом:
Сколько максимальное количество клиентов может обработать TServerSocket и по какой технологии.
Я используюя потоки, больше 10 неполучаю :(
P.S.
Работаю на машине где Cel 1200 и 512 памяти.
Интересующийся (2006-02-11 14:57:00) [1]piople © (07.02.06 11:33) [3]
Подскажите плиз, что за key и что туда писать надо.
Интересующийся (2006-02-11 12:33:00) [2]Может кто даст точно исправный код (можно общие вещи) отправки клиенту статических страциц и графики?
Свой код я уже раз 10 переписыфвал, результат есть (10 держит, если система свободна от другой работы), но результат меня не устраивает.
А если учесть что серверу нужно кроме отсылки файлов и другую инфу обрабатывать становится понятно, что сервер и 10 недаст. :((
P.S.
Просто интересно где я ошибся в своем сервере.
Сейчас кода столько, что легче начать все заново.
Defunct (2006-02-11 12:05:00) [3]> Каково реальное (пракическое) число одновременно работающих конектов?
Очень большое число ;>
Теоретически это число ничем не ограничивается поскольку сервером используется всегда один и тот же порт.
Defunct (2006-02-11 12:03:00) [4]> Спасобо и на этом, по крайней мере ясно, что переход на другое CPU принесет некоторый результат.
Результат - отлаживать программу будет легче, а вот проблему программы он не решит. Т.е. программа как "подвисала" так и будет продолжать "подвисать", не подвешивая при этом систему. Не более того..
Интересующийся (2006-02-11 12:02:00) [5]Может кто сталкивался с проблемой ограничения числа конектов принимаемых TServerSocket.
Каково реальное (пракическое) число одновременно работающих конектов?
Гарри Поттер (2006-02-11 12:00:00) [6]"плохо написаное многопоточное приложение в многопроцессорной системе может выполняться медленнее, чем в однопроцессорной." (с) Марко Кэнту
Интересующийся (2006-02-11 11:58:00) [7]Defunct © (11.02.06 11:27) [25]
Спасобо и на этом, по крайней мере ясно, что переход на другое CPU принесет некоторый результат.
P.S.
Вопрос с логикой сервера будем решать программно :)
Defunct (2006-02-11 11:27:00) [8]> Поможет ли мне и насколько исполдьзование CPU c програмной реализацией двух ядер (Int Pen 4 3000, к примеру)?
> По всей видимости нет. А только ухудшит положение дел.
Прощу прощения отвечая на вопрос не о том подумал. Разумеется двухядерный процессор всегда лучше для многопоточной обработки, во всяком случае риск подвестить систему гораздо меньше чем на одноядерном процессоре. Но проблему вашу он не решит.
Defunct (2006-02-11 11:22:00) [9]> Если количество больше, происходит следующее:
мда..
> Возможные источники проблемы
> 5. Другие вариавнты о которых я незнаю.
Ошибка в программе.
> Поможет ли мне и насколько исполдьзование CPU c програмной реализацией двух ядер (Int Pen 4 3000, к примеру)?
По всей видимости нет. А только ухудшит положение дел.
> 2.
Влияет ли количяество аперативы на количество потоков в системе или нет
нет
3.
Как влияют параметры HDD на весь процесс (какой тип диска нужен и что даст использование рэйда из двух идисков)?
в вашем случае - никак.
4. Каков будет эффект, если сменить Win XP на Win Server 2003?
Хотя как понимаю сам этот вопрос глуп (таи своя IIS есть, хотя).
Эффекта не будет (кроме потери времени на установку WS2003)
P.S.
Главный вопрос который меня интересует:
Если ошибка не в логике сервера, то может ли мне помочь переход на другой проц?
Ошибка в логике сервера, поэтому переход на другой проц. ничего не даст.
Интересующийся (2006-02-11 07:36:00) [10]Ботвин Дмитрий (10.02.06 11:26) [22]
> Попробуй создавать потоки с простаивающем приоритетом Idle, скорее всего и комп вешатся перестанет...
Идея правильная, но как показала практика потоки с нормальнымприоритетом (приоритетом юзер) работают ненамного лучьше :(
Привысоких (Выше нормальных и реальных) с другими приложениями работать тоже можна, если количество потоков <=10.
Если количество больше, происходит следующее:
1. Теряется инфа в сокете
2. Теряется инфа в логе (ресурс отдается но в логе об этом записи нет).
Об этом свидетельствует разница между числом записей и общим числом конектов лиентов.
3. Возникает обшибка о невозможности создать сокет(точный текст и номер непомню)
4. Вешается едро системы ( Kernel32.dll), наглухо :((
5. После Kernel32.dl возможны варианты:
а) Сервер работает несколько минут после чего вылитает по ошибке.
б) Система вешается наглухо (для перезавгрузки проименяю кувалду в виде "Reset"), что неприемлемо.
в) Комп сам уходит на перезавгрузку.
Возможные источники проблемы
1. Проц и система не вывозят такой нагрузки (100%, при 10 одновременных конектах)
2. В обрабатке раздачи ресурсов и записи в лог происходит ошибка совместного доступа к ресурсам.
3. Неправелен весь подход к работе при помощи TThread (что само по себе хотя и возможно, но сомнительно).
4. Работа с большим количеством потоков на одноядерном проце невозможна (хотя сами потоки, если их количество не загоняет CPU очень облегчают жизнь).
5. Другие вариавнты о которых я незнаю.
Дополнительные вопросы:
1.
Хотя из всего того, что я знаю о потоках и работе с ними можно сделать вывод о том, что на 90% верен 4 вариант хотелось бы узнать:
Поможет ли мне и насколько исполдьзование CPU c програмной реализацией двух ядер (Int Pen 4 3000, к примеру)?
2.
Влияет ли количяество аперативы на количество потоков в системе или нет?
3.
Как влияют параметры HDD на весь процесс (какой тип диска нужен и что даст использование рэйда из двух идисков)?
4. Каков будет эффект, если сменить Win XP на Win Server 2003?
Хотя как понимаю сам этот вопрос глуп (таи своя IIS есть, хотя).
P.S.
Главный вопрос который меня интересует:
Если ошибка не в логике сервера, то может ли мне помочь переход на другой проц?
В работе пробовал ОС:
Win 98S, Win Me, Win XP Prtof SP1, сейчас Win XP Prtof SP2
Ботвин Дмитрий (2006-02-10 11:26:00) [11]Интересующийся
Вот твоя ошибка:
>... передаю инфу в поток с высоким приоритетом.
На самом деле твой комп не вешается, просто процесс Explorer, который отвечает за отклик на действия юзера, не может запустить свои потоки, т.к.
они долго ждут своей очереди у планировщика потоков ОС.
Попробуй создавать потоки с простаивающем приоритетом Idle, скорее всего и комп вешатся перестанет...
Интересующийся (2006-02-10 09:46:00) [12]Сейчас у меня стоит Win XP Prof SP2.
Дополнительных обновлений пока неставил.
GanibalLector (2006-02-10 01:21:00) [13]>Я используюя потоки, больше 10 неполучаю
KB893066 стоит?
Интересующийся (2006-02-09 17:16:00) [14]Демку с TIdHTTPServer нашел, буду разбираться!
Интересующийся (2006-02-09 17:12:00) [15]Я в своем сервере в ОnConect ловил и передавал управление в поток, а где здесь обработку начинать и каким образом?
Интересующийся (2006-02-09 17:09:00) [16]> Ты демо-проект с использованием TIdHTTPServer смотрел ?
Сам компонент смотрел (интересная штка), но демку с ним я найти немогу, у меня D6 стоит :(
Digitman (2006-02-09 17:08:00) [17]Нормальный "кусок".
Что в нем тебе не понятно ?
Интересующийся (2006-02-09 17:06:00) [18]> При работе сервер выводи следующие
> ...HTTPServerListen
> ...HTTPServerGetSocket
> ...HTTPServerAccept
> ...HTTPServerGetThread
> ...HTTPServerThreadStart
Кусок из лога при работе TServerSoket при ServerType=stThreadBlocking
Digitman (2006-02-09 12:11:00) [19]
> Интересующийся (09.02.06 11:22) [13]
> Listen и Accept как я понимаю мне ненужны, а вот что делать
> с остальными?
Ты демо-проект с использованием TIdHTTPServer смотрел ?
Версия Indy у тебя какая установлена ? Где ты там такие события увидел ?
> Хотелось бы еще узнать насколько это увеличит работоспособность
> сервера
Что есть "работоспособность сервера " ?
Интересующийся (2006-02-09 11:22:00) [20]При работе сервер выводи следующие
...HTTPServerListen
...HTTPServerGetSocket
...HTTPServerAccept
...HTTPServerGetThread
...HTTPServerThreadStart
Вопрос таков:
Listen и Accept как я понимаю мне ненужны, а вот что делать с остальными?
P.S.
Хотелось бы еще узнать насколько это увеличит работоспособность сервера (насколько я понимаю из объявление в модуле "TServerClientThread" является потомком TThread)
Кроме того, в своем сервере я использую потомок TThread который я могу исправить и дополнить нужными мне вещами.