Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 27, 2015 11:31:34

qVadro
Зарегистрирован: 2013-02-12
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

Игровой сервер на python

Привет, я только начал вникать в питон и задался вопросом как можно реализовать игровой сервер на питоне? Подходит ли django для этого? Как бы выглядел код для реализации реалтайм игры, например пошаговый бой двух игроков?

Офлайн

#2 Дек. 27, 2015 13:23:38

slav0nic
Команда
От: dp.ua
Зарегистрирован: 2006-05-07
Сообщения: 2260
Репутация: +  41  -
Профиль   Отправить e-mail  

Игровой сервер на python

смотрите в сторону асинхронных фреймворковс поддержкой вебсокетов (если веб)
crossbar.io (twisted), asyncio, tornado и тп
в джанге будут большие задержки, но если очень хочется, можно глянуть http://channels.readthedocs.org/en/latest/ (скоро будет включено в джангу) или всякие socketio обёртки, http://swampdragon.net/ и тп

Отредактировано slav0nic (Дек. 27, 2015 13:28:31)

Офлайн

#3 Дек. 27, 2015 14:14:12

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

Игровой сервер на python

qVadro
игровой сервер на питоне?
Да не совсем ясно что вы имеете ввиду. Это веб? Можно ведь сервер и просто поднять для общения обычных приложений.
В сетевых играх критически местом будет не код на питоне, а графика и передача данных по сети. У меня опыт небольшой, но аяксе скорее всего будет периодичеки лагать где-то по 0.5 секунды. На вебсокетах можно сделать побыстрее. На обычных сокетах думаю можно догнать темп сообщений по сети до 10000 в секунду. См например производительность https://pythonhosted.org/Pyro4/intro.html.



Офлайн

#4 Дек. 27, 2015 14:59:29

qVadro
Зарегистрирован: 2013-02-12
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

Игровой сервер на python

doza_and
Имел в виду игровую логику, синхронизацию действий пользователей для мультиплеера. Не обязательно веб игры. Для мобильной или десктопной тоже, общий

Офлайн

#5 Дек. 27, 2015 15:56:15

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

Игровой сервер на python

qVadro
Подходит ли django для этого?
qVadro
Не обязательно веб
django вам наверное не нужен. Один из простых способов синхронизации для не очень динамичных игр это уведомления от СУБД хранящей игровые данные. Посмотрите http://docs.sqlalchemy.org/en/latest/core/event.html



Офлайн

#6 Дек. 27, 2015 23:44:48

qVadro
Зарегистрирован: 2013-02-12
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

Игровой сервер на python

doza_and
через бд не подходит, хочется разобраться с решением побыстрее, как бы это выглядело на питоне. Допустим нужно начать забег 3-4 игроков в игре “раннер”. Каждый игрок видит всех игроков в забеге и его перемещения, к примеру игра Ninjump Dash. Я бы хотел увидеть набросок кода как это можно реализовать. Я так понимаю при поиске соперников происходит поиск по временным таблицам с начинающимися сессиями, а при нужно количестве игроков происходит начало сессии игровой, но как бы это выглядело в коде пока не понимаю

Офлайн

#7 Дек. 28, 2015 13:43:53

slav0nic
Команда
От: dp.ua
Зарегистрирован: 2006-05-07
Сообщения: 2260
Репутация: +  41  -
Профиль   Отправить e-mail  

Игровой сервер на python

qVadro
ну тогда Twisted + redis/что-то подобное
из примеров http://bazaar.launchpad.net/~game-hackers/game/trunk/view/head:/gam3/network.py twisted+pygame (старый код)
https://pygnetic.readthedocs.org
http://www.pygame.org/tags/server (+теги multiplayer, network)
https://github.com/marcusmoller/pyorpg-server/blob/master/src/server.py (автор похоже имеет поверзностное понимае про асинхронный подход)
правда для pygame всё старое и уровень входа в twisted считается высоким

Отредактировано slav0nic (Дек. 28, 2015 13:45:20)

Офлайн

#8 Дек. 28, 2015 20:14:22

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

Игровой сервер на python

qVadro
хочется разобраться с решением побыстрее
Надеюсь это означает что вы хотите более быстродействующую технологию а не побыстрее с этим разделаться.
Однако игровой сервер не самая сложная проблема. Что будет с графикой? Тоже питон?

Если надо быструю сеть, то с ZeroMQ думаю проще разобраться чем с twisted. Вам надо сначала разобраться с логикой работы вашей системы.

Начните с пиро, помоему удачная система. Берете пример и задачиваете под свои нужды

Сервер
import Pyro4
class GameServer(object):
    def register_user(self, userdata):
        ....
        return user_id
    def logout_user(self, user_id):
        .....
    def process_actions(self,user_id,action_list):
        .....
    def send_scene(self):
        .....
daemon = Pyro4.Daemon()                # make a Pyro daemon
ns = Pyro4.locateNS()                  # find the name server
uri = daemon.register(GameServer)   # register the GameServer as a Pyro object
ns.register("example.GameServer", uri)   # register the object with a name in the name server
print("Ready.")
daemon.requestLoop()               

Игроки

import Pyro4
class Player(object):
    def register(self, userdata):
        ....
        return user_id
    def logout(self, user_id):
        .....
    def send_actions(self):
       ....
    def set_scene(self,scene_data_changes):
      ....
......

А вообще для одного игрока что-то сделайте, если получится, то уверяю вас, 98% ваших сегодняшних вопросов вас уже не будут волновать.



Отредактировано doza_and (Дек. 28, 2015 20:17:38)

Офлайн

#9 Дек. 29, 2015 12:55:48

qVadro
Зарегистрирован: 2013-02-12
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

Игровой сервер на python

doza_and
Спасибо большое за пример.

Что будет с графикой? Тоже питон?
Я абстрагируюсь от клиента, меня просто интересует серверная часть. Графику и с cdn скачать можно

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version