Модераторы: gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Производительный сервер на C# 
:(
    Опции темы
Leksey
Дата 17.4.2006, 22:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 332
Регистрация: 12.12.2004

Репутация: нет
Всего: 1



Вот есть проблема: Многопользовательский сервер на C#.
Если бы писал на C++ использовал бы пул потоков и порты завершения для того чтобы не создавать на каждого клиента по потоку.
Как эту проблему решить на С#?

PS Вариант импортирования функций не предлагать. 
PM MAIL   Вверх
arilou
Дата 17.4.2006, 23:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Великий МунаБудвин
****


Профиль
Группа: Экс. модератор
Сообщений: 2646
Регистрация: 15.7.2004
Где: город-герой Минск

Репутация: 3
Всего: 61



Цитата(Leksey @  17.4.2006,  22:09 Найти цитируемый пост)
Вот есть проблема: Многопользовательский сервер на C#.
Если бы писал на C++ использовал бы пул потоков и порты завершения для того чтобы не создавать на каждого клиента по потоку.
Как эту проблему решить на С#?

Асинхронный ввод/вывод на С# уже есть. Он реализуется с помощью методов Begin..., End.... Например, у сокета есть методы BeginReceive, EndReceive. Пул потоков тоже присутствует в виде класса ThreadPool. 

Для чего сервер-то?  

Это сообщение отредактировал(а) arilou - 18.4.2006, 10:38


--------------------
user posted imageuser posted image
PM WWW ICQ   Вверх
Leksey
Дата 18.4.2006, 13:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 332
Регистрация: 12.12.2004

Репутация: нет
Всего: 1



Я про  BeginReceive...,  EndReceive знаю.
Сервер для компьютерной игры.
Решил делать так один поток на 5 клиентов с асинхронными сокетами на сервере и один дополнительный поток на клиенте. 
PM MAIL   Вверх
arilou
Дата 18.4.2006, 13:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Великий МунаБудвин
****


Профиль
Группа: Экс. модератор
Сообщений: 2646
Регистрация: 15.7.2004
Где: город-герой Минск

Репутация: 3
Всего: 61



Цитата(Leksey @  18.4.2006,  13:20 Найти цитируемый пост)
Я про  BeginReceive...,  EndReceive знаю.

FYI, порты завершения -> в .NET это называется асинхронный ввод вывод -> BeginReceive, EndReceive.
 


--------------------
user posted imageuser posted image
PM WWW ICQ   Вверх
vinegr
Дата 17.5.2006, 10:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 6.2.2006

Репутация: 1
Всего: 3



Коллеги, а можно поподробнее ?
у меня есть сервер на асинхронных сокетах, и я считал, что BeginReceive указывает call-back, который запускается по событию прихода данных, а выделение нити, в контексте которой выполняется call-back - дело системное и абсолютно непрозрачное.
Логирование показывает, что нити повторно используются, количество работающих нитей зависит от нагрузки на сервер - но как бы явно управлять этой механикой ?
(меня заинтриговала фраза 
Цитата

Решил делать так один поток на 5 клиентов с асинхронными сокетами на сервере 

как при использовании асинхронных сокетов ты будешь задавать, что вот эти 5 клиентов (сокетов) надо обслуживать вот этой нитью, а вот эти - другой нитью ? 
PM MAIL   Вверх
arilou
Дата 17.5.2006, 11:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Великий МунаБудвин
****


Профиль
Группа: Экс. модератор
Сообщений: 2646
Регистрация: 15.7.2004
Где: город-герой Минск

Репутация: 3
Всего: 61



Цитата(vinegr @  17.5.2006,  10:07 Найти цитируемый пост)
количество работающих нитей зависит от нагрузки на сервер - но как бы явно управлять этой механикой 

Не уверен, что это возможно, т.к. overlapped I/O - это фича ОС. Хотя я не знаю, надо копать. 


--------------------
user posted imageuser posted image
PM WWW ICQ   Вверх
Leksey
Дата 17.5.2006, 19:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 332
Регистрация: 12.12.2004

Репутация: нет
Всего: 1



Это точно возможно на C++ и WinAPi.
А вот в .Net не уверен....  
PM MAIL   Вверх
arilou
Дата 18.5.2006, 12:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Великий МунаБудвин
****


Профиль
Группа: Экс. модератор
Сообщений: 2646
Регистрация: 15.7.2004
Где: город-герой Минск

Репутация: 3
Всего: 61



Цитата(Leksey @  17.5.2006,  19:42 Найти цитируемый пост)
Это точно возможно на C++ и WinAPi.

Ага, тока речь идет о дотнете  smile  


--------------------
user posted imageuser posted image
PM WWW ICQ   Вверх
Exception
Дата 18.5.2006, 18:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 4525
Регистрация: 26.12.2004

Репутация: 2
Всего: 186



Цитата(arilou @  18.5.2006,  13:14 Найти цитируемый пост)

Ага, тока речь идет о дотнете  


Кто-то отменил DllImport smile ? 
PM   Вверх
arilou
Дата 18.5.2006, 18:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Великий МунаБудвин
****


Профиль
Группа: Экс. модератор
Сообщений: 2646
Регистрация: 15.7.2004
Где: город-герой Минск

Репутация: 3
Всего: 61



Цитата(Exception @  18.5.2006,  18:27 Найти цитируемый пост)
Кто-то отменил DllImport 

Ну ну. 


--------------------
user posted imageuser posted image
PM WWW ICQ   Вверх
vinegr
Дата 26.5.2006, 17:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 6.2.2006

Репутация: 1
Всего: 3



Цитата(Leksey @  17.5.2006,  19:42 Найти цитируемый пост)
Это точно возможно на C++ и WinAPi.
А вот в .Net не уверен....  

штука не в том, чтобы поймать событие от overlapped I/O operation
штука в том, что очередь событий и механизм порождения нитей-обработчиков находятся где-то в недрах (я полагал, что в недрах исполняющей системы дотНета, но м.б. и в недрах WinAPi) - вот про это где бы почитать ? 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
cully
mr.DUDA
Exception

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, cully, mr.DUDA, Exception.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Распределённые приложения и сеть | Следующая тема »


 




[ Время генерации скрипта: 0.0783 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.