Ответы пользователя по тегу C++
  • [Большой txt ~1 гб] как обработать?

    @kazmiruk
    Прогоните файл утилитой sort (если используете linux). На выходе получите файл, который будет отсортирован. А дальше дело техники, файл в память грузить не надо. Читаете построчно и суммируете z. Как только поменялись x или y - обнуляем z и считаем для следующей пары.
    Ответ написан
    3 комментария
  • Как написать реал-тайм онлайн игру? Методология, паттерны, статьи?

    @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 комментария