Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
while (....) {
u_char buf[1024];
recv(fd, buf, size)
...
}
далее, в пакете есть полезная нагрузка, некие поля, которые нужно рапарсить и что-то в зависимости от их содержиого сделать.
typedef struct {
int len;
char field1;
char field2;
int filed3;
} packet;
packet *p = (packet *)buf;
swith(p->filed1) {
....
все.. вот он, пример особой уличной магии простой работы с указателями.
Мы получаем доступ куда хотим, без копирования и выделения памяти каждый раз, на каждый пришедший пакет. Оверхед сведен к миниму, на огромном кол-ве конектов приведенный код будет справлятся лутше, будет использовать меньше памяти и тд.
И да, треды нафиг не нужны, мультиплексирование справляется с нагрузками на ура. Это я понял, когда во времена 486 процессоров увидел, как фтп сервер спокойно держал и обслуживал ~10к пользователей одновременно.
Автор молодец, читать мне было интересно. Для флеш игрушки самое оно. Но если вы хотите hi-load, вам нужно общаться с компютером ЕГО сущностями, абстракции и прочие человекообразный объекты сдесь только мешает.
public void run()
{
while ( isActive )
{
// Получаем следующую сессию для обработки
Session session = (Session) this.sessionQueue.take();
// Здесь происходит обработка игровых сообщений
// получаем пакет
packet = session.getReadPacketQueue().take();
// далее получаем и обрабатываем данные из него
data = packet.getData();
}
}
for(;;) {
wait_for_sys_events(wait_for_next_timeout); // дожидаемся евентов от операционки и обрабатываем
time = now(); // текущее время
wait_for_next_timeout = do_timers(time); // обработать таймеры и получить через сколько будет след таймер
do_game_logic(time); // игровая логика
garbage_collect(); // почистить ненужные сокеты итп
}
В статье описывается обработка соединений, про логику там ни слова.
Я Вам задал конкретный вопрос, до этого другие комментаторы его задали ещё в начале 2012 года, но Вы так и не удосужились на него ответить.
— Где профит вашей архитектуры?
— Где хранится состояние игрового мира, кто им управляет?
— Блокировки по всему коду
— Трудность отладки и поддержки кода
Сущность игрока, в котором содержится его здоровье.
Игрока можно атаковать, а значит это уже +1 блокировка.
У игрока есть мана на которую может влиять другой игрок, это ещё +1 блокировка, на игроке висят «эффекты», которые могут отменится другими игроками, это ещё +1 блокировка, На деле такой список в 100 раз больше.
Разработка производительного игрового сервера на Netty + Java