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

Вниз

Сокеты и события   Найти похожие ветки 

 
BloodNV   (2006-07-20 10:13) [0]

Здравствуйте. Я использую компоненты TClientSocket и TServerSocket. Задача следующая: существует сервер и n-е кол-во клиентов, при определенном действии сервер передаёт комманды клиентам (например: "[make list]"), прежде чем передать другому клиенту сервер должен дождаться ответа от клиента (например "[DONE]"), только потом передать следующему клиенту и работать с ним. Вся проблемма заключается в том, что когда я делаю цикл по ActiveConnections не срабатывает событие OnRecieve, что только не пробовал, не получается, помоги, пожалуйста или может какие другие компоненты посоветуете. Заранее спасибо.


 
Лапыч ©   (2006-07-20 10:50) [1]

Советую разобраться с WS API - будешь создавать супер-гибкие приложения. Мне лично не нравятся родные компоненты TClientSocket и TServerSocket. В API сокетов нет ничего сложного, однако существуют несколько подводных камней, но они уже давно пройдены и опубликованы в тематической литературе.


 
BloodNV   (2006-07-20 10:53) [2]

Лапыч, спасибо.


 
Лапыч ©   (2006-07-20 11:55) [3]

Пожалуйста.

Хочу привести аналогию с клиентом SQL-сервера: insert, update, delete и select. В клиентах сокета: connect, send, recv. Абсолютно ничего сложного.

Сервер можно организовать на потоках (один клиент - один поток) или на функции select. Все зависит от максимально возможного количества клиентов. Если их меньше 16, то можно на потоках, если больше - нужно на select.

Если система распределенная, то советую почитать об MPI и подобных вещах.


 
Slym ©   (2006-07-20 13:36) [4]

Лапыч ©   (20.07.06 11:55) [3]
Сервер можно организовать на потоках (один клиент - один поток) или на функции select. Все зависит от максимально возможного количества клиентов. Если их меньше 16, то можно на потоках, если больше - нужно на select.

Откуда такие сведения?
Тогда уж сразу на Fiber или на IOCompletition...


 
Slym ©   (2006-07-20 13:43) [5]

Начни с изучения свойства ServerType...


 
Лапыч ©   (2006-07-20 15:18) [6]

2Slym:
Я так всегда делаю и очень доволен получаемыми результатами. Дело в том, что организовывать работу с клиентом на стороне сервера с помощью потоков весьма удобно. Но что делать если клиентов, скажем, сотня? Сто потоков на один процесс это, конечно, бред. Microsoft не рекомендует порождать больше 32 потоков на один процесс. Делим пополам - получаем реальное ограничение. Серьезные сервера, обслуживающие тысячи клиентов, обрабатывают события всех клиентов в одном потоке с помощью функции select.


 
learner ©   (2006-07-20 19:17) [7]

>Лапыч
>Сто потоков на один процесс это, конечно, бред. Microsoft не рекомендует >>порождать больше 32 потоков на один процесс.
А я в Хелпе вычитал следующее:
"The number of threads a process can create is limited by the
available virtual memory. By default, every thread has one
megabyte of stack space. Therefore, you can create at
most 2028 threads. If you reduce the default stack size,
you can create more threads."


 
Slym ©   (2006-07-21 04:56) [8]

Лапыч ©   (20.07.06 15:18) [6]
Серьезные сервера, обслуживающие тысячи клиентов

SQL сервер в одном потоке клиентов обслуживает?! Фигушки!
Если уж начал Микросовта цитировать то цитируй правильно...
Для серверов обслуживающих множестно клиентов Microsoft рекомендует пользовать IOCompletition функции т.к. IO использует APC (AsynckProcCall) работающие на уровне ядра что быстрее чем select и переключение потоков


 
Slym ©   (2006-07-21 04:59) [9]

можно Fiber подружить с selectом и получится тоже не плохо


 
Ketmar ©   (2006-07-21 21:11) [10]

а можно проверить практикой. вот мой прокси имеет около 40-50 потоков обычно, и ничего -- не заикается.


 
Fay ©   (2006-07-23 08:55) [11]

2 Slym ©   (21.07.06 4:56) [8]
Вы не могли бы объяснить, каким образом порты завершения ввода вывода могут быть противопоставлены нитям? Мне не понятно.


 
Ketmar ©   (2006-07-23 12:37) [12]

например, WainForSingleObject() (или подобное) и дёргание события в IOCompletionProc.



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

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

Наверх





Память: 0.47 MB
Время: 0.04 c
3-1159875254
jiny
2006-10-03 15:34
2006.12.10
Out of Memory при формировании отчета в FastReport 3


2-1164042627
lobach
2006-11-20 20:10
2006.12.10
Как проверить существование пункта в listbox?


2-1164214839
Галинка
2006-11-22 20:00
2006.12.10
"Резинка" в c#


3-1159842850
Lex_!
2006-10-03 06:34
2006.12.10
DBGrid - первая колонка заголовком


15-1163783232
TUser
2006-11-17 20:07
2006.12.10
Не сочтите за рекламу,





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