ПрограммированиеФорумСеть

Сеть для ММО. подскажите начинающему.

Страницы: 1 2 3 Следующая »
#0
12:02, 25 янв 2010

Занялся работой с сетью(на данный момент полный нуб в этой сфере). В статье описывается только "начало" работы - блокирующие сокеты не очень то юзабельны.

От сети мне требуется:
- нужно написать простенькую оболочку над функциями чтобы получилось примерно следующее: сетевай код постоянно принимает данные из сети и пишет их буферы (у каждого сокета свой буфер в котором храниться пришедшая информация). Получаю информацию из буферов с помощью функций похожих на `getNext4bytes()` `getNextByte()`
- сервер в состоянии работать с большим кол-вом клиентов (ММО, 2к+ клиентов)

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

перечитывал форум - пишут в основном что используют IOCP  и boost::asio.  Что лучше ? какие подводные камни? и вообще подходит ли эти технологии или искать что то другое?

#1
12:16, 25 янв 2010

asio - жутко тяжелая штука, которая даже с прекомпилированными хидерами увеличивает время компиляции как минимум на секунд 5. Зачем оно надо?

Могу за просто так поделиться своим работающим велосипедом.

#2
12:39, 25 янв 2010

Буду очень рад если поделишся)))

#3
12:51, 25 янв 2010

GSENet.cpp
GSEnet.h

Так как делал для собственного пользования, в тексте нет пояснений как этим пользоваться...

#4
13:29, 25 янв 2010

MarkoPolo
а вот мое мнение что asio жутко хорошая весчь.

Antoha2
используй asio, о камнях сообщиш :)

я вот тут пишу сервер на asio - http://axe-engine.sourceforge.net/

#5
13:46, 25 янв 2010

В общем, опишу функции, а с аргументами сам разберешься.

Net_Init - запускаешь в перед тем как вообще что-либо делать дальше.
Net_CreateHandle - создает невидимое win32 окно, которое будет обрабатывать сообщения от сети.
Net_OpenSocket - создает сокет.
Net_BindToHandle - связывает сокет и хэндл полученный из Net_CreateHandle.
Net_GetHostName - показывает имя компа в сети
Net_GetHostIP - показывает все IP компа.
Net_Process - обработка сообщений.
Net_Stop - команда для хэндла, чтобы прекратить обрабатывать сообщения.
Net_Cleanup - после того, как все сделаешь, используешь ее для закрытия библиотеки.
Net_FillInAddr - заполняет структуру IP и портом для дальнейшего использования.

Net_SetOnAcceptCallback - установка функции возврата, когда получаем сообщение на подключение клиента.
Net_SetOnReadCallback - установка функции возврата, когда в буфере есть байты для чтения.
Net_SetOnWriteCallback - установка функции возврата, когда есть возможность писать в буфер.
Net_SetOnConnectCallback - установка функции возврата, когда подключается к серверу.
Net_SetOnCloseCallback - установка функции возврата, когда комп по ту сторону разорвал соединение.

Net_Send - посылает буфер заданного размера
Net_Recive - получает буфер максимального размера

Net_ConnectToServer - соединиться с заданным сервером.
Net_BindListenPort - Функция связывания для порта прослушки на сервере.
Net_ListenSocket - Функция для начала прослушки.

Net_GetLastError - последняя ошибка
Net_GetErrorString - текстовая строка ошибки

Net_GetSocketState - статус сокета

Есть две структуры:
Net_InBuffer, Net_OutBuffer для более удобной отправки-получения.

Net_InBuffer используется так:
1. Создаешь его где-нибудь.
2. В функции, которую повесил через Net_SetOnReadCallback делаешь следующее:
  Use(), если Full(), то обрабатываем полученный кусок данных, затем Reset().

Net_OutBuffer - просто статический массив с шаблонными операторами << для удобного добавления байт.

Где-нибудь в главном цикле игры вызываешь Net_Process.

В общем-то все.

IROV..
Она может быть и хорошая, но она как я уже сказал жутко тяжелая...

#6
13:53, 25 янв 2010

IROV..
Исходники asio весят около 2 метров, в противовес моим 15 кило, плюс ваша надстройка это еще сколько-то...

#7
14:07, 25 янв 2010

MarkoPolo
может они не просто так весят? :)

моя настройка это моя настройка, это как пример

а вот решены ли у тебя те проблемы которые решены в асио? я думаю нет, думаю даже ты с ними не сталкивался, хотя дай бог мне ошибатся :)

#8
14:10, 25 янв 2010

IROV..
Когда столкнусь, то код можно расширить, а если не столкнусь, то зачем оно надо?

#9
14:17, 25 янв 2010

MarkoPolo
не хочется лишний раз сталкиватся с "детскими болезнями"

#10
14:28, 25 янв 2010

IROV..
хе-хе... бывает.

#11
20:47, 25 янв 2010

IROV..

>>я вот тут пишу сервер на asio - http://axe-engine.sourceforge.net/

чето там как-то пусто)

#12
0:20, 26 янв 2010

MarkoPolo
> Она может быть и хорошая, но она как я уже сказал жутко тяжелая...
сервак может весить сколько угодно
и компилиться тоже

главное, как раз, стабильность и отсутствие "детских болезней" ; )

#13
1:46, 26 янв 2010

>>сервак может весить сколько угодно
>>и компилиться тоже

>>главное, как раз, стабильность и отсутствие "детских болезней" ; )

не в размере суть. Есть поставленые задачи - ищеться решение для них. Возможно asio и крут и он просто убер, но муторный аж звиздец. яйца бы отрвать тем кто так пишет код везде все через щаред поинтеры, все в шаблонах.... блин хочеться хороших указателей пишите на C#,пока разбераешся в подобном коде невольно задумываешся а не сделать ли свой велосипед.

А кто что думает о IOCP ??

#14
12:45, 26 янв 2010

Antoha2
> А кто что думает о IOCP ??

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

Страницы: 1 2 3 Следующая »
ПрограммированиеФорумСеть

Тема в архиве.