Я разрабатываю сервер на С#. Этот сервер будет выступать в качестве сервера данных для службы резервного копирования: клиент будет отправлять данные, много данных, непрерывно, в частности, будет отправлять кусок данных объемом до пяти в одном и том же канале tcp. Я буду отправлять данные на сервер медленно, я не хочу убивать пропускную способность клиента, поэтому мне не нужно было ускоряться при максимальной отправке данных, и по этой причине я могу использовать один канал tcp для всего.
Сказанное это, на самом деле сервер использует метод BeginReceive для получения данных от клиента, а в окнах это означает IOCP. Мои вопросы: как BeginReceive будет работать на linux/freebsd через моно? На окнах я читал много всего, будет очень хорошо работать, но это программное обеспечение, часть сервера, будет работать на Linux или FreeBSD через моно, и я не знаю, как эти методы реализованы на нем!
Подробнее, чтобы попытаться уменьшить продолжающиеся распределения объекта Async State для метода (Begin | End) Receive я mantain one для подключения tcp и в обратном вызове BeginReceive, я копирую данные перед повторным использованием (естественно, я не очистить данные, потому что я знаю, сколько прочитанных значений возвращаемого значения EndReceive). Буфер установлен на 8kb, поэтому я буду при максимальном копировании 8kb данных, он не должен убивать резорбции.
Моя цель - получить до 400/500 соединений при макс. Это не так много, но сервер (машина), тем временем, будет обрабатывать файлы через собственную файловую систему (разработанную с использованием плавкого предохранителя сначала на С#, а затем на C) на LVM + Linux Software Raid Mirror и проверку антивируса с помощью clamav, так что программное обеспечение должно быть легким, как можно!
EDIT: я забыл сказать, что машина будет (возможно) Intel Core 2 Duo 2.66+ ГГц (3 МБ L2 - FSB 1066 МГц) с 2 ГБ оперативной памяти и SO с использованием 64 бит.
Моно использует epoll (libevent) или kqueue (на freebsd)? И я должен сделать что-то конкретное, чтобы попытаться максимизировать выступления? Могу ли я сделать что-то еще, чтобы не убивать ресурсы, получающие пакеты данных?