Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2006.07.16;
Скачать: [xml.tar.bz2];

Вниз

Клт.-Серв. приложение на WinSock с большим количеством клиентов.   Найти похожие ветки 

 
SPACE!!   (2005-12-16 15:38) [0]

Здарова народ. Задача такова есть сервер и клиент. Сервер
должен поддерживать до 1000 клиентов, а может и больше.

Как я это хотел реализовать :

Поток1 = Главный поток.

Поток2 = Интерфейс для подключение. Идентификатор подключившегося добавляется в массив клиентов.

Поток3 = Идет работа с массивом клиентов. Но есть одно
но , фунция Recv  не возвращает управление  до получения
данных. Есть ли асинхронный аналог этой функции ?

И наилучший ли это подход к решение данной задачи ?


 
Reindeer Moss Eater ©   (2005-12-16 15:46) [1]

Поток № 2 приняв подключение респавнит новый поток и сообщает клиенту номер порта по которому он реально будет работать.

Только проще использовать готовые механизмы.


 
Digitman ©   (2005-12-16 15:57) [2]


> Reindeer Moss Eater ©   (16.12.05 15:46) [1]


> номер порта по которому он реально будет работать


не загнул ли ?

по тому по которому connect() успешно прошел, по тому и работать будет.

аль не так ?


> SPACE!!   (16.12.05 15:38)  


> Здарова народ


Здарова.
Займи штук десять до 32-ва ?


> Сервер
> должен поддерживать до 1000 клиентов, а может и больше


не проблема.
ограничения очевидны - ресурсы системы и ресурсы конкр.приложения.


> Как я это хотел реализовать


желательно НЕ изобретать велосипед.

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

везде суть одна - есть "слушающий" поток, он при факте успешного коннекта создает новое гнездо и ассоциированный с ним транспортный поток, искл-ная задача которого - принимать/передавать данные по этому соединению.


 
Reindeer Moss Eater ©   (2005-12-16 16:00) [3]

не загнул ли ?

по тому по которому connect() успешно прошел, по тому и работать будет.

аль не так ?


У него же проблема с синхронностью. А клиентов много


 
SPACE!!   (2005-12-16 17:55) [4]

=)
Хотел упомянуть что на транпортном уровне будет использоваться протокол
TCP.

Я смотрю вы меня непоняли.Я нехочу создовать отдельный поток для каждого соееденения поэтому мне и нужна асинхронная функция. Да
и насколько мне известна есть лимит равный 16 потоком на процесс, надеюсь кто небудь подтвердит мои слова.

Вобще можно было воспользоваться протоколом UDP надеюсь вы о таком слышали,этот протокол не гарантирует доставку дейтаграмм, но с помощью
него можно обойтись одним потоком для всех клиентов. Логика гарантии доставки ложится на плечи программиста, это впринципе небольшая проблема, но задача определения что клиент отключен усложняется, вижу
только один вариант посылка через N-ое количество итераций тестового
пакета.

Я не уверен что компонеты и велосипеды это уместно. В любой компонет
напиханно куча всякой ерунды и чаще всего получается как хуже.
Тоесть вы неимеете понятия что происходит на более низком уровне вы
также незнаете является ли решения задач реализуемых в компоненте оптимальными. Есть еще много доводов.

В конце концов WinSock дает больше возможностей.


 
atruhin ©   (2005-12-16 18:11) [5]

>>SPACE!!   (16.12.05 17:55) [4]
А может прежде чем говорить, почитать книжки?
>>Тоесть вы неимеете понятия что происходит на более низком уровне
Тебя это наверное удивит, но мы имеем понятие. :)
А хочешь получить нормальный ответ, сформулируй задачу, задай конкретный вопрос.


 
SPACE!!   (2005-12-16 18:30) [6]

atruhin
Задача сформулированна конкретна. Небудем сориться и спорить кто больше
прочитал книг..

Задача решена всем спасибо.
Если память мне неизменила, то решение простое сокеты просто переводятся
в асинхронный режим, тем самым теже самые функции работают в асинхронном режиме. Удачи.


 
Digitman ©   (2005-12-17 12:41) [7]


> насколько мне известна есть лимит равный 16 потоком на процесс


нет такого лимита


> В любой компонет
> напиханно куча всякой ерунды


TServerSocket - это компонент именно TCP-транспортного уровня, ничего лишнего там нет , если конечно же не считать "лишним" диспетчер пула транспортных трэдов, который задействуется искл-но в режиме ThreadBlocking

тебя же волнует именно асинхронный неблокирующий режим (NonBlocking), а этот режим устанавливается по умолчанию при активации компонента

поэтому я и предложил тебе посмотреть, как там, внутри этого компонента вся эта асинхронная петрушка организована, если уж так хочется "велосипед"


 
FrykT ©   (2005-12-18 08:22) [8]

Нехочется создавать новую ветку, поэтому давайте тут обсудим. Этот вопрос я уже поднимал на локальном форуме в сети. Он  звучал примерно также,  как и заголовок этой темы... Так вот, хотелось бы сделать Tcp-сервер, поддерживающий  много клиентов (около 1000, может и более). На Сервер-сокеты даже не смотрю уже ( пройденный этап), Хотелось бы только на WinSock"е сделать. Асинхронный у меня действительно много держал клиентов (на сообщениях окна делал), но после 5000 коннектов стал подвисать, и в конце вообще повис (не отрицаю, что криво запрограмил). Пробывал делать многопточный, на клиента по потоку - через пул. После 1000 вылетел с outofmemory. Еще через Select Существует способ, но там не более 64 сокета может поддерживать. Мне на локальном форуме предложили сделать 63 сокета на поток. Только я смутно представляю, как это сделать. У кого есть идеи, пишите тут.


 
Slym ©   (2005-12-19 09:38) [9]

Fibers!
1000-5000 клиентов 10-100 потоков (Threads)
1 клиент - 1 Fiber


 
Digitman ©   (2005-12-19 09:46) [10]


> После 1000 вылетел с outofmemory


При использовании TThread размер стека каждого вновь создаваемого доп.потока по дифолту соответствуют размеру стека осн.потока .. но АП процесса не резиновое  .. отсюда и outofmemory


 
simpson ©   (2005-12-19 14:15) [11]

SPACE!!   (16.12.05 15:38)
FrykT ©   (18.12.05 08:22) [8]

См. в сторону портов завершения ввода-вывода.

SPACE!!   (16.12.05 17:55) [4]

Все-таки читай книжки :) Помогает разрушать иллюзии. :)


 
FrykT ©   (2005-12-24 19:39) [12]

simpson, Вы про ИоКомплетишнПорт ?? Можно поподробнее??


 
имя   (2005-12-26 10:11) [13]

Удалено модератором


 
MAX2002   (2006-01-08 23:31) [14]

Писал много поточное приложение держало порядко ~1000 клиентов, все окей работает.. без остановочно около года в инете на винде.. каждый поток отжирает порядка 1Мб... на серваке 2Гб :)


 
Kacnep ©   (2006-03-13 09:23) [15]

2 Макс2002
Хотяб написал что использовал :(
Интересно ведь...



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

Форум: "Сети";
Текущий архив: 2006.07.16;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.009 c
15-1150365896
DillerXX
2006-06-15 14:04
2006.07.16
У вас работает ICQ?


2-1151389275
Kain-Lord
2006-06-27 10:21
2006.07.16
Помогите с мерцанием!


2-1151566117
PSPF2003
2006-06-29 11:28
2006.07.16
Проблема с DATA


8-1138709076
RBi
2006-01-31 15:04
2006.07.16
Где найти платные/бесплатные библиотеки для работы с PSD?


6-1141675738
NKVDwnik
2006-03-06 23:08
2006.07.16
IIS





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский