Всем здрасти!!! ))
Очередной раз пытаюсь капать огромные знания мегагеймкодеров и девелоперов
пытаюсь реализовать сетевую архитектуру (с управлением управляющим сервером над игровыми серверами и логин сервером), отнюдь в предыдущем посте (viewtopic.php?f=14&t=2641), где пытался поднять данную штукенцию с помощью возможностей наткнулся на ограничение - "невозможность создать клиент и сервер в одном приложении".
в следствии очередного моЦкового штурма, пришел к выводу, что необходимо использовать на самом главном серваке систему с высоким параллелизмом, которую можно решать с помощью нитей (все прозрачно и понятно, но управление большим количеством серверов приложение не потянет - расход памяти на каждую нить может стать критичным), или же применять асинхронные методы для передачи по сети
(есть еще 2 решения параллелизма, смысла освещать их я не вижу)
остановился на асинхронных методах (BeginWrite, BeginRead). Но тут следующий вопрос - при использовании блокирующих методов (Read, Write) можно использовать для записи в NetworkStream поток BinaryReader и BinaryWriter, при использовании которых не нужно ломать голову над буфером передачи/приема, размером данных, точкой чтения/записи, все происходит автоматически; при неблокирующем методе (BeginWrite, BeginRead) такая штука не прокатит - BinaryReader и BinaryWriter не предназначены для асинхронной записи, и приходится возвращаться к азам (низкоуровневому программированию) - получать размер передаваемых данных ставить его в начало в буфере передачи, затем разбивать буферпередачи на пакеты (которые передаются в BeginWrite, при этом последний блок будет с пустыми байтами) и по очереди талкать их в канал, а на приеме наоборот; ТАК ВОТ КАК-ТО ПРОЩЕ МОЖНО ЭТО ВОПЛОТИТЬ В ЖИЗНЬ, С ПОМОЩЬЮ ЗАРАНЕЕ ГОТОВЫХ РЕШЕНИЯХ ИЛИ НУЖНО В МАМОНТА ПРЕВРАТИТЬСЯ И ЛАПАТИТЬ ПЕРФОКАРТЫ (короче полная , не сложно конечно и это написать, но в такой системе лучше из .Net что-то юзануть дабы не нарваться на неожиданный Error )
буду очень признателен кодерам за их интересные решения данной проблемы