• Как написать реал-тайм онлайн игру? Методология, паттерны, статьи?

    lexxpavlov
    @lexxpavlov
    Программист, преподаватель
    По части вопросов и общих моментов - присоединяюсь к @kazmiruk и @dplsoft, они всё правильно сказали. Их советы на самом деле хороши.

    Добавлю только несколько ссылок, которые вам могут пригодиться:
    0fps.net - ресурс по созданию реалтаймовых сетевых движков (на англ.)

    Что должен знать каждый участник крупного MMO-проекта - отличный список вопросов, ответы на которые нужно знать для создания движков. Чем лучше понимаешь ответы на эти вопросы, тем лучше получится проект.

    Две статьи от Маилру по созданию сервера: Базы данных в онлайн-играх. От Аллодов Онлайн до S... и
    Архитектура сервера онлайн-игры на примере Skyforge. Подробно и качественно рассматривают создание сервера игры.

    Сетевое программирование для разработчиков игр:
    Часть 1: UDP vs. TCP
    Часть 2: прием и передача пакетов данных
    Часть 3: виртуальные соединения поверх UDP

    Ещё полезные статьи с хабра:
    Высоконагруженные системы: решение основных проблем
    Создание многопользовательской realtime игры на node.js
    Как не нужно писать большие сервера - на java
    Ответ написан
    Комментировать
  • Что лучше использовать для компиляции less в Yii 2.0?

    @maxyc_webber
    Web-программист
    а я бы поручил это делать phpShtorm'у
    Ответ написан
    Комментировать
  • Как написать реал-тайм онлайн игру? Методология, паттерны, статьи?

    @kazmiruk
    Вы задаете более-менее правильные вопросы, но на них нет правильных ответов. Каждый случай очень индивидуальный и кратким ответом тут не обойтись, тут нужны лекции с тоннами теории. Я в свое время писал игры: php (api) + flash (клиент) + C++ (сервер) + mysql (база данных) + memcache (кеш), php (api) + python gevent (сервер) + mongodb (база данных) + redis (кеш) + html5 (клиент), nodejs (сервер) + html5 (клиент) + redis (кеш) + postgresql (база данных). Все они были довольно проивзодительными. Такое разнообразие технологий отчасти обуславливалось моим любопытством (проект на nodejs писал для себя).
    В целом пытаясь ответить на Ваши вопросы:
    1. Не совсем понятно что Вы имеете ввиду. Уточните вопрос.
    2. Лучше всего передавать на сервер все действия клиента и обсчет производить на сервере для невозможности подделывания результатов действий, но это приводит к возрастанию нагрузки на сервер. Протокол - мне нравится bson с готовыми библиотеками, понятным форматом и небольшим размером. Но опять же его я использовал только во втором проекте, в остальных местах я создавал свои велосипеды, которые для конкретных случаев были наиболее эффективны (в моем представлении)
    3. В базе хранить все, что не должно пропадать между играми (условно говоря после выключения сервера ;)), в оперативной памяти дублировать все в идеале (для избавления от операций чтения с диска).
    4. Зависит от потребностей. Postgresql\mysql - более традиционны. Mongodb - модная ) Если Вы понимаете, что в Вашей игре вы можете пережить ограничения mongodb (к примеру отсутствие транзакций) - юзайте его, очень удобен для хранения игровых состояний. Если не уверены - используйте традиционные реляционки.
    5. Кеширование по сути и есть перемещение данных из БД в оперативную память. Причем перемещается таким образом, что скорость выборки из оперативной памяти не зависит от количества данных. Это так называемые хэш-таблицы.

    В общем, без обид, но судя по Вашим вопросам Вам надо очень серьезно подтянуть теорию, прежде чем браться за серьезную игру. Писать серверную часть на С++ - круто, если Вы его знаете на отлично. В целом большого профита Вы не получите, так как скорость С++ проявляется в числодробилках. А игровой сервер - в основном операции чтения\записи, которые будут одинаково выполняться на практически любом современном языке и их скорость больше зависит от построенной архитектуры.
    Мои рекомендации: читать про блокирующие\неблокирующие сокеты, многопточность, структуры данных, паттерны проектирования, оптимизация запросов (включая нормализацию и денормализацию данных), кеширование. Параллельно с этим можно делать простенький чатик постепенно улучшая и оптимизируя его. Таким образом Вы приобретете и теорию, и практику. После этого можно сделать какую-нибудь простенькую игру.
    Ответ написан
    4 комментария
  • В чем же сила Node.js ?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Сила в том что все знают JS. Кто может писать на PHP/Ruby/Python? Те кто пишут на PHP/Ruby/Python соответственно (и скажем по 10%-15% от количества каждых кто может писать хотя бы на двух из трех языков. Кто может писать на JS? Все фронтэндеры + добрых каких 60%-70% от всех этих php/ruby/python/java/c# разработчиков...

    Что это дает? ОГРОМНЕЙШЕЕ комьюнити... большая часть быдло конечно но засчет огромнейшего количества разработчиков инструментарий начал просто очень быстро развиваться. Кому нужен инструмент написанный на Ruby если его можно написать на JS и его сможет поддерживать на порядок больше людей?

    Вопрос производительности по началу стоял как основная фишка языка. Все кричали наконец-то, V8 на сервере, асинхронность! Самый быстрый интерпритируемый язык на планете и все такое. Но на деле все чуть сложнее. JS реально быстрый. По сравнению с тем же Ruby он в разы быстрее! Но по большому счету на это адекватным людям плевать с высокой колокольни, так как js нифига не асиинхронный. JS работает в один поток. Причем в этом же потоке работает и сборщик мусора. Если он начнет все чистить - все замрет. Обычно это не сильно большая проблема но как-то забавно. Асинхронное в JS только работа с IO которая на плюсах/си реализована...

    Революционности так же нету. JS на сервере не новая идея и практиковался еще лет за 5 до. Просто это была очень удачная реализация да ктому же если бы не V8 то так же все было бы не так круто.

    Что до сравнения с PHP и т.д. - это инструменты для разных сфер. PHP - разработка web-сайтов. node.js - демоны, инструменты разработки, шины данных, доставка данных и т.д. Для всего остального PHP подходит больше. Есть правда пара интересных проектов главная цель которой устранить дублирование кода на сервере и на клиенте.... но подходят эти наработки пока только для очень простых проектов (хотя все относительно).

    Если вас прям плющит от нового, быстрого, современного, с клевым дизайном и тоже где повлиял гугл - golang.
    Ответ написан
    11 комментариев
  • Сервер Debian. Как отключить\настроить ipv6?

    TrueBers
    @TrueBers
    Гуглю за еду
    Что-то не совсем понятно, что у вас там происходит, но, как я понимаю, нужно просто повысить приоритет IPv4 перед IPv6 при резолве имени? Если так, то отредактируйте файл /etc/gai.conf.
    Если там уже есть закоментированые строки, раскоментируйте precedence ::ffff:0:0/96 100. Если нет - добавьте.
    Отключить получение IPv6 адреса на интерфейсе можно через sysctl:
    net.ipv6.conf.<interfacename>.disable_ipv6 = 1
    Ответ написан
    Комментировать