Асинхронная передача данных по сети (TCP)

Сеть в Unity3D

Асинхронная передача данных по сети (TCP)

Сообщение Faps 20 окт 2010, 22:45

Всем здрасти!!! ))

Очередной раз пытаюсь капать огромные знания мегагеймкодеров и девелоперов

пытаюсь реализовать сетевую архитектуру (с управлением управляющим сервером над игровыми серверами и логин сервером), отнюдь в предыдущем посте (viewtopic.php?f=14&t=2641), где пытался поднять данную штукенцию с помощью возможностей [unity 3D] наткнулся на ограничение - "невозможность создать клиент и сервер в одном приложении".

в следствии очередного моЦкового штурма, пришел к выводу, что необходимо использовать на самом главном серваке систему с высоким параллелизмом, которую можно решать с помощью нитей (все прозрачно и понятно, но управление большим количеством серверов приложение не потянет - расход памяти на каждую нить может стать критичным), или же применять асинхронные методы для передачи по сети
(есть еще 2 решения параллелизма, смысла освещать их я не вижу)

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

буду очень признателен кодерам за их интересные решения данной проблемы
Faps
UNIт
 
Сообщения: 73
Зарегистрирован: 29 май 2010, 13:21

Re: Асинхронная передача данных по сети (TCP)

Сообщение Faps 22 окт 2010, 17:55

Так кто-нибудь пытался строить архитектуру сети на низком уровне (TcpListener, TcpClient)???
Faps
UNIт
 
Сообщения: 73
Зарегистрирован: 29 май 2010, 13:21

Re: Асинхронная передача данных по сети (TCP)

Сообщение Neodrop 22 окт 2010, 22:39

А какие сложности написать на (c#) TCP/IP Server-Client :-?
Это же элементарная задача, рассмотренная в сотнях интернет-страниц на всех (почти) языках мира?
Добавить neodrop в Skype
Изображение
"Спасибо!" нашему порталу, вы сможете сказать ЗДЕСЬ.
Если проблема не решается честно, нужно её обмануть! || Per stupiditas at Astra!
Страх порождает слабость. Бесстрашных поражают пули.
Протратившись на блядях байтах, на битах не экономят.
Аватара пользователя
Neodrop
Админ
 
Сообщения: 8480
Зарегистрирован: 08 окт 2008, 15:42
Откуда: Питер
Skype: neodrop
  • Сайт

Re: Асинхронная передача данных по сети (TCP)

Сообщение Faps 23 окт 2010, 08:07

с сетью начал только ковыряться

написать простейший TCP кл-серв могу без проблем

а вто чтоб сделать сервер написанный на асинхронных методах тут проблема

и листинг есть у меня

я не понимаю, как производить контроль информации (при асинхронных методах посылки передаются четко установленной длины, мне нужно передавать разной длины блоки - на приемной стороне произвести десериализацию данного блока, ну и произвести какие-либо с ним действия), но т.к. при асинхронном методе написания сервера возможен прием информации кусков блоков от разных клиентов - тут и ступор.
Так вот - как правельно сделать совмещение блоков (определения точной длины переданного блока)???

я написал пока сервер в блокирующем режиме (там можно передавать поток сразу, за длиной не нужно смотреть) состоящий из нескольких нитей (каждая нить обслуживает своего клиента) - но это не решение проблемы (хотя для управления другими клиентами достаточно при их небольшом количестве)
Faps
UNIт
 
Сообщения: 73
Зарегистрирован: 29 май 2010, 13:21


Вернуться в Сеть

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5