Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.02.26;
Скачать: CL | DM;

Вниз

Вопрос про TServerSocket   Найти похожие ветки 

 
Интересующийся   (2006-02-07 05:13) [0]

Подскажите плиз!

Может кто уже сталкивался с подобным вопросом:
Сколько максимальное количество клиентов может обработать TServerSocket и по какой технологии.

Я используюя потоки, больше 10 неполучаю :(

P.S.
Работаю на машине где Cel 1200 и 512 памяти.


 
Digitman ©   (2006-02-07 08:18) [1]


> Сколько максимальное количество клиентов может обработать
> TServerSocket


Это зависит от диапазона значений, которые может хранить переменная Integer-типа и от наличия ряда свободных ресурсов (процесса и системы в целом).


> по какой технологии


Что подразумевается под "технологией" ?


> больше 10 неполучаю


Быть того не может...


 
Ботвин Дмитрий   (2006-02-07 11:30) [2]

Digitman ©   (07.02.06 08:18) [1]

>Быть того не может...

Может, у него скорее всего ОС не серверная стоит на том компе, куда он подключается, а не серверные ОС допускают макс. кол-во подключений не больше 10 :-)))


 
piople ©   (2006-02-07 11:33) [3]


> Может, у него скорее всего ОС не серверная стоит на том
> компе, куда он подключается, а не серверные ОС допускают
> макс. кол-во подключений не больше 10 :-)))

Все правильно, но в реестре есть ключ снимающий это ограничение :)


 
Ботвин Дмитрий   (2006-02-07 11:47) [4]

piople ©   (07.02.06 11:33) [3]

Согласен, но любая прикладная прога должна работать с установками "по умолчанию", иначе в комплект поставки программы будет входить "куча гемороя" на случай если у текущего пользователя прав на запись в реестр не хватит :-)))


 
Digitman ©   (2006-02-07 12:12) [5]

Да, это (еще одно и в дан.случае важное) ограничение я упустил из вида.


 
Интересующийся   (2006-02-09 05:12) [6]

piople ©   (07.02.06 11:33) [3]

> Все правильно, но в реестре есть ключ снимающий это ограничение :)

Хотелось бы узнать про этот "Золотой" ключик реетра, если можно :)
У меня XP Prof.

P.S.
При тестировании у меня выходило значение 12-15 запросов одновремменно, но там или часть инфы терялась или ядро системы наглухо вешалось.

Про сообщения о невозможносмти создать сокет и другие я неговорю! (:


 
Интересующийся   (2006-02-09 05:25) [7]

Про технологию!

Я работаю при неблокированном сокете, а многопоточность создаю при помощи TThread.
Вся обрпботка выполняется в потоке.

Есть запись в лог (Текстовый файл), без нее никак!

Основной проблемой по тестовым наблюдениям является загрузка одного процессора.

При тестировании в логе по общему числу запросов получается, что иногда проходит 12-15 запросов.
Пиковая нагрузка 18-20, после чего машина вешается.

P.S.
Хотедось бы узнать какие максимальные значения можно получить на обычной машине с одним процессором, на машине с програмной эмуляцией двух и на серверной машине.


 
Digitman ©   (2006-02-09 08:21) [8]


> загрузка одного процессора


Никакого отношения имеющееся ограничение числа коннектов к загрузке процессора (одного или нескольких - неважно) не имеет.


> иногда проходит 12-15 запросов.
> Пиковая нагрузка 18-20, после чего машина вешается


У тебя ошибки в программе.


> какие максимальные значения можно получить


Максимальные значения чего ?
Что такое "запрос" ?


 
Интересующийся   (2006-02-09 09:37) [9]

> Что такое "запрос"?

Запрос - это один блок данных (пакет) получаемый сервером от клиента с указанием какой ресурс требуется клиенту и другой инфой посылаемой клиентом (IE, Oper ...) моему серверу.

> У тебя ошибки в программе.

Возможно и ошибка, но скорей всего не в программе, а в логике которую она реализует.

Алгоритм таков:
1. Обробатываю OnConect сервера и передаю инфу в поток с высоким приоритетом.
2. Поток определяет авторизацию клиента и наличние требуемого ресурса.
3. Если авторизация пройдена и ресурс существует определяем тип ресурса.
4. Если ресурс текстовый отдаем его как текст с указанием служебной инфы (тип сервера, mime и т.д.), если ресурс - рисунок или файл посылаем через буфер с размером 1024 (ставил 512и 256, результат неизменился).
5. Производится запись в лог (IP клиента, дата начала и конца работы с запросом,время работы, код ответа, требуемый ресурс).
6. Производим отключение клиента.

P.S.
При работе через буфер удается передать только те файлы у которых отсутствует пометка "Только для чтения".
Работа ведется через AssignFile().

Предпологаю, что ошибка может возникать при одновременном обращение к одному файлу, что на практике подтвердить пока к сожалению не смог.


 
Digitman ©   (2006-02-09 09:43) [10]


> работаю при неблокированном сокете, а многопоточность создаю
> при помощи TThread


Чем не устроил вариант с ServerType = stThreadBlocking ?


 
Интересующийся   (2006-02-09 10:45) [11]

> Чем не устроил вариант с ServerType = stThreadBlocking ?

Всем устраивает, но у меня сервер под TThread заточен.

Хотя если есть смысл отказаться от TThread и перейти на другой вариант, можно и сервер переделать!

P.S.
Если у кого есть примерчик работы сервера при ServerType = stThreadBlocking, может поделитесь?


 
Digitman ©   (2006-02-09 10:48) [12]


> Всем устраивает, но у меня сервер под TThread заточен


В режиме stThreadBlocking компонент TServerSocket заточен именно под TThread.


> примерчик работы сервера при ServerType = stThreadBlocking


Borland Socket Server (scktsrvr.dpr) - в штатной поставке Делфи.


 
Интересующийся   (2006-02-09 11:22) [13]

При работе сервер выводи следующие

...HTTPServerListen
...HTTPServerGetSocket
...HTTPServerAccept
...HTTPServerGetThread
...HTTPServerThreadStart

Вопрос таков:
Listen и Accept как я понимаю мне ненужны, а вот что делать с остальными?

P.S.
Хотелось бы еще узнать насколько это увеличит работоспособность сервера (насколько я понимаю из объявление в модуле "TServerClientThread" является потомком TThread)

Кроме того, в своем сервере я использую потомок TThread который я могу исправить и дополнить нужными мне вещами.


 
Digitman ©   (2006-02-09 12:11) [14]


> Интересующийся   (09.02.06 11:22) [13]



> Listen и Accept как я понимаю мне ненужны, а вот что делать
> с остальными?


Ты демо-проект с использованием TIdHTTPServer смотрел ?
Версия Indy у тебя какая установлена ? Где ты там такие события увидел ?


> Хотелось бы еще узнать насколько это увеличит работоспособность
> сервера


Что есть "работоспособность сервера " ?


 
Интересующийся   (2006-02-09 17:06) [15]

> При работе сервер выводи следующие

> ...HTTPServerListen
> ...HTTPServerGetSocket
> ...HTTPServerAccept
> ...HTTPServerGetThread
> ...HTTPServerThreadStart

Кусок из лога при работе TServerSoket при ServerType=stThreadBlocking


 
Digitman ©   (2006-02-09 17:08) [16]

Нормальный "кусок".
Что в нем тебе не понятно ?


 
Интересующийся   (2006-02-09 17:09) [17]

> Ты демо-проект с использованием TIdHTTPServer смотрел ?

Сам компонент смотрел (интересная штка), но демку с ним я найти немогу, у меня D6 стоит :(


 
Интересующийся   (2006-02-09 17:12) [18]

Я в своем сервере в ОnConect ловил и передавал управление в поток, а где здесь обработку начинать и каким образом?


 
Интересующийся   (2006-02-09 17:16) [19]

Демку с TIdHTTPServer нашел, буду разбираться!


 
GanibalLector ©   (2006-02-10 01:21) [20]

>Я используюя потоки, больше 10 неполучаю
KB893066 стоит?


 
Интересующийся   (2006-02-10 09:46) [21]

Сейчас у меня стоит Win XP Prof SP2.

Дополнительных обновлений пока неставил.


 
Ботвин Дмитрий   (2006-02-10 11:26) [22]

Интересующийся

Вот твоя ошибка:
>... передаю инфу в поток с высоким приоритетом.

На самом деле твой комп не вешается, просто процесс Explorer, который отвечает за отклик на действия юзера, не может запустить свои потоки, т.к.
они долго ждут своей очереди у планировщика потоков ОС.

Попробуй создавать потоки с простаивающем приоритетом Idle, скорее всего и комп вешатся перестанет...


 
Интересующийся   (2006-02-11 07:36) [23]

Ботвин Дмитрий   (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


 
Defunct ©   (2006-02-11 11:22) [24]

> Если количество больше, происходит следующее:

мда..

> Возможные источники проблемы
> 5. Другие вариавнты о которых я незнаю.

Ошибка в программе.

> Поможет ли мне и насколько исполдьзование CPU c програмной реализацией двух ядер (Int Pen 4 3000, к примеру)?

По всей видимости нет. А только ухудшит положение дел.

> 2.
Влияет ли количяество аперативы на количество потоков в системе или нет

нет

3.
Как влияют параметры HDD на весь процесс (какой тип диска нужен и что даст использование рэйда из двух идисков)?

в вашем случае - никак.

4. Каков будет эффект, если сменить Win XP на Win Server 2003?
Хотя как понимаю сам этот вопрос глуп (таи своя IIS есть, хотя).

Эффекта не будет (кроме потери времени на установку WS2003)

P.S.
Главный вопрос который меня интересует:
Если ошибка не в логике сервера, то может ли мне помочь переход на другой проц?

Ошибка в логике сервера, поэтому переход на другой проц. ничего не даст.


 
Defunct ©   (2006-02-11 11:27) [25]

> Поможет ли мне и насколько исполдьзование CPU c програмной реализацией двух ядер (Int Pen 4 3000, к примеру)?

> По всей видимости нет. А только ухудшит положение дел.

Прощу прощения отвечая на вопрос не о том подумал. Разумеется двухядерный процессор всегда лучше для многопоточной обработки, во всяком случае риск подвестить систему гораздо меньше чем на одноядерном процессоре. Но проблему вашу он не решит.


 
Интересующийся   (2006-02-11 11:58) [26]

Defunct ©   (11.02.06 11:27) [25]

Спасобо и на этом, по крайней мере ясно, что переход на другое CPU принесет некоторый результат.

P.S.
Вопрос с логикой сервера будем решать программно :)


 
Гарри Поттер ©   (2006-02-11 12:00) [27]

"плохо написаное многопоточное приложение в многопроцессорной системе может выполняться медленнее, чем в однопроцессорной." (с) Марко Кэнту


 
Интересующийся   (2006-02-11 12:02) [28]

Может кто сталкивался с проблемой ограничения числа конектов принимаемых TServerSocket.

Каково реальное (пракическое) число одновременно работающих конектов?


 
Defunct ©   (2006-02-11 12:03) [29]

> Спасобо и на этом, по крайней мере ясно, что переход на другое CPU принесет некоторый результат.

Результат - отлаживать программу будет легче, а вот проблему программы он не решит. Т.е. программа как "подвисала" так и будет продолжать "подвисать", не подвешивая при этом систему. Не более того..


 
Defunct ©   (2006-02-11 12:05) [30]

> Каково реальное (пракическое) число одновременно работающих конектов?

Очень большое число ;>
Теоретически это число ничем не ограничивается поскольку сервером используется всегда один и тот же порт.


 
Интересующийся   (2006-02-11 12:33) [31]

Может кто даст точно исправный код (можно общие вещи) отправки клиенту статических страциц и графики?

Свой код я уже раз 10 переписыфвал, результат есть (10 держит, если система свободна от другой работы), но результат меня не устраивает.

А если учесть что серверу нужно кроме отсылки файлов и другую инфу обрабатывать становится понятно, что сервер и 10 недаст. :((

P.S.
Просто интересно где я ошибся в своем сервере.
Сейчас кода столько, что легче начать все заново.


 
Интересующийся   (2006-02-11 14:57) [32]

piople ©   (07.02.06 11:33) [3]

Подскажите плиз, что за key и что туда писать надо.



Страницы: 1 вся ветка

Текущий архив: 2006.02.26;
Скачать: CL | DM;

Наверх




Память: 0.55 MB
Время: 0.035 c
2-1139341472
drink
2006-02-07 22:44
2006.02.26
Глюк в ДБГрид.


15-1139217177
kaZaNoVa
2006-02-06 12:12
2006.02.26
Можно ли по номеру телефона узнать данные абонента-2


2-1139691033
Norfolk
2006-02-11 23:50
2006.02.26
Собственный тип данных в отдельный модуль


2-1139657000
mctarik
2006-02-11 14:23
2006.02.26
Как определить размер файла


11-1120661444
DemON_
2005-07-06 18:50
2006.02.26
Kol ГДЕ image??





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский