Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Программирование игр, графики и искусственного интеллекта > Сервер online игры


Автор: Simargl 13.12.2007, 00:13
Доброе время суток, 
возник вопрос: а как пишется серверная часть для онлайн игр, какие потоки там необходимо выделять, ну и т.д. по списку.

Автор: Simargl 13.12.2007, 23:55
Ладно, раз никто не ответил, то возможно плохо изложил идею... попробую с другой стороны. 
 smile 

Итак игра аля Arcanum, есть города, игрок может перемещаться между городами, соответственно могут генериться случайные встречи.
За встречи, города, бои, добычу ресурсов отвечает сервер.
Меня сервер интересует с сугубо технической точки зрения (не плохо бы было узнать как устроены сервера того же WoW или Ultima), в частности как там осуществлять работу с потоками. Как я думаю:
должны быть потоки отвечающие за игрока, основной, отвечающие за жизнь "городов".
???

Автор: Ryoga 14.12.2007, 01:00
Шли бы Вы на ДТФ - я не думаю, что здесь кто-то что-то подобное реализовывал... smile

Автор: Simargl 14.12.2007, 01:05
Ryoga:  ДТФ - а это куда  smile  , поподробнее можно?

вопрос, снят, нашёл  smile 

Автор: Rickert 14.12.2007, 09:11
dtf.ru - на будущее.

Автор: arilou 17.12.2007, 21:03
Ryoga, ну вот прямо так уже и никто  smile 

Автор: Ryoga 17.12.2007, 22:48
arilou, я ошибся? Тем лучше... smile Ждём Вашего рассказа. smile

Автор: arilou 19.12.2007, 12:44
Simargl, есть такой вариант:

На каждый тип игрового объекта (NPC, инвентарь, квест, и т.п.) отводится отдельный поток на обработку. При таком подходе сервер хорошо масштабируется при увеличении кол-ва процессоров/ядер. 

Опишите конкретнее, что именно интересует. При разработке онлайновых миров очень много ньюансов и трудностей.

Автор: sparn 15.1.2008, 15:13
Цитата

На каждый тип игрового объекта (NPC, инвентарь, квест, и т.п.) отводится отдельный поток на обработку. При таком подходе сервер хорошо масштабируется при увеличении кол-ва процессоров/ядер. 

Это, мягко говоря, не лучшая идея smile. Во первых - количество потоков в любой ОС ограничено, во вторых - при слишком большом количестве потоков даже на много процессорных системах чревато значительной потерей производительности. Даже выделение отдельного потока под каждого подключившегося игрока - это не есть хорошо. В третьих - А как вы себе представляете синхронизацию такого количества потоков? Это сплошные ДедЛоки(чесно говоря не знаю как обстоит дело в дот нет но если использовать стандартное апи ОС то это превратится в титанический труд) smile.

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

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

И еще запускается такое же количество потоков для обработки таймаутов.

Кроме того благодаря небольшому количеству потоков такую схему можно применять к каждой локации например(если их не запредельное количество конечно)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)