1. 游客, мы просим Вас ознакомиться с Правилами Форума и Отказом от ответственности!

Альтернативный способ получения информации

本贴由 Botchal2012-05-01 发布. 版块名称: PW Web

  1. TopicStarter Overlay

    Botchal MMORPG-DEVS.RU Пользователи

    帖子:
    182
    支持:
    67
    Репутация:
    0
    Решил поделиться альтернативным способом получения информации о персонажах, кланах и городах для топов.

    Для начала нужно создать 12 таблиц в MySQL у вас на сайте. 6 таблиц основных и 6 временных. Временные таблицы типа MEMORY нужны для быстрого INSERT'a.
    Ну а с основными вы будете работать из ваших скриптов, так как персонажей может быть очень много рекомендую расставить индексы в основных таблицах, индексы во временных ставить не нужно.

    SQL код таблиц для вашего сайта.




    Перенос информации состоит из 2 частей:
    1) Выполнение команд gamedbd на игровом сервере
    2) Запись полученной информации в MySQL

    Если коротко всё выглядит так: Crontab у вас на сайте вызывает скрипт который получает информацию от скрипта у вас на сервере и заносит в базу. Для понимания условно назовём их скриптами для сайта и скриптами для сервера.

    Пример серверного скрипта:
    Где /pwserver/gamedbd/ путь до gamedbd от корня сервера. Для проверки наберите в терминале /pwserver/gamedbd/gamedbd /pwserver/gamedbd/gamesys.conf listrole если выдаст - значит правильно.
    Назовём его server.php, в зависимости от GET параметра скрипт будет выполнять ту или иную команду и выводить полученную информацию. Этот скрипт живёт у вас на сервере с игровым серверов в директории www.

    Более подробно с командами gamedbd вы можете ознакомиться набрав в Яндексе "gamedbd команды" там ссылка в первых пяти позициях с заголовком - Gamedbd Модуль-игровой-базы-данных
    всё подробно описано.

    Для того, чтобы PHP скрипт мог выполнять команды, вам необходимо прописать права на директорию с сервером

    代码:
    chmod -R 777 /pwserver/
    где /pwserver/ - директория вашего сервера. если сервер живёт в 2 директориях например в PWServer и в home, то прописать как на /home/ так и на /PWServer/

    С серверным скриптом разобрались, теперь пример скриптов для сайта, в кронтабе я использую утилиту php5 вместо wget так как wget у меня создаёт побочные файлы, и это никак не убрать.
    Но через php5 нельзя передать GET параметры, поэтому необходимо для каждой команды сделать отдельный скрипт.


    php код скриптов для сайта (создать и залить на сайт). В коде изменить 255.255.255.255 на ваш IP-адрес
    и вписать в $db = new mysqli("", "", "", ""); хост, юзер, пасс, название базы для подключения к MySQL у вас на сайте.
    Данные скрипты будут брать информацию от скриптов с вашего сервера по средству file_get_contents(), заносить в MySQL данные.

    listcity.php - для информации о территориях и их владельцах





    listfaction.php - инфо о кланах



    listfactionuser.php - инфо о мемберах кланов





    listrole.php - персонажи




    listrolebrief.php - персонажи коротко



    listuserbrief.php - голд и ещё инфа


    Эти скрипты можно повесить на крон как я уже сказал, а можно вызывать руками.
    Для того, чтобы проверить работает ли система, вам нужно набрать в вашем браузере

    代码:
    http://255.255.255.255/server.php?db=listrole
    если вы прописали права и правильно указали путь до директории с gamedbd, то вы увидите нечто вроде


    Если экран пустой - значит вы либо не прописали права либо указали не верно пути до gamedbd в server.php

    Теперь проверим занесение в MySQL у вас на сайте. Запросим через браузер скрипт

    http://you_site.ru/listrole.php

    Это тот скрипт что вы создали и залили. Для отладки добавте в начало скрипта
    代码:
    ini_set('display_errors','On');
    сразу после <?php через пробел или на следующей строчке, это поможет увидеть ошибки вывод которых по умолчанию отключён. Быть может у вас отключена file_get_contents(), нужно капнуть php.ini, подробности в яндексе.

    Если ошибок нет, то можно смотреть наши таблицы в MySQL. Там данные. Ну а что с этими данными делать сами решайте, можно топ - http://www.pw-projec...p?name=listrole можно онлайн по классам - http://www.pw-projec...name=listonline или ещё что другое.

     
    已获得nom1nal, Denis-root, Тыщ另外18人的支持.
  2. SineD Пользователи

    帖子:
    31
    支持:
    1
    性别:
    Репутация:
    0
    Команда:
    Nevermind PW
    хоть у кого то получилось запустить?
  3. BadGuy Заблокированные

    帖子:
    0
    支持:
    0
    Репутация:
    0
    Команда:
    DLT
    У ботча
  4. SineD Пользователи

    帖子:
    31
    支持:
    1
    性别:
    Репутация:
    0
    Команда:
    Nevermind PW
    кэп с нами
    а серьезно, ботч походу ты 1 смог запустить...
  5. BadGuy Заблокированные

    帖子:
    0
    支持:
    0
    Репутация:
    0
    Команда:
    DLT
    приобрети себе прямые руки, даже по инструкции сделать не можешь
  6. TopicStarter Overlay

    Botchal MMORPG-DEVS.RU Пользователи

    帖子:
    182
    支持:
    67
    Репутация:
    0
    в чём конкретно проблемы, не выводит или не заносит?
  7. TopicStarter Overlay

    Botchal MMORPG-DEVS.RU Пользователи

    帖子:
    182
    支持:
    67
    Репутация:
    0
    эхх, выводило бы ещё
    代码:
    read tablename roleid
    , вообще полностью переписали бы базу. А то только через терминал видно, ктонить копал?
  8. maksimillian Define!!!11 Пользователи

    帖子:
    88
    支持:
    25
    性别:
    Репутация:
    0
    Команда:
    Diamond
    Отлично, у меня поперло. Правда тестировал на 1 3 6 сервере (некоторые значения не выводились). Но в целом работает.

    Вот что думаю: на сервере таблицы все в bdb (Berkeley DB). На PHP пробовал мутить с dbm процедурами (нашел в интернете, что эти процедуры работают с BDB), кое-что получилось, но незначительно. На жуке тему про это видел, там даже приводились библиотеки для C++ и java, но у меня с этим худо.
    1 человеку нравится это.
  9. maksimillian Define!!!11 Пользователи

    帖子:
    88
    支持:
    25
    性别:
    Репутация:
    0
    Команда:
    Diamond
    Ботч, я нашел способ.

    root@Server:/home/gamedbd# ./gamedbd gamesys.conf read base 32 2> ~/out.log
    По идее это 2 поток в команде.


    Сие чудо вывело в файл как раз тот вывод, что был в консоле:
    1 строка compressed data
    2 строка decompressed data
    1 человеку нравится это.
  10. 1vitek1 Пользователи

    帖子:
    31
    支持:
    16
    性别:
    Репутация:
    0
    Команда:
    Life-PW
    Ботч, оформление на сайте, данных примеров, как я понимаю сами делали?
  11. TopicStarter Overlay

    Botchal MMORPG-DEVS.RU Пользователи

    帖子:
    182
    支持:
    67
    Репутация:
    0
    ясен пень сам) т.е. банальные иконки и то сам спиздил сохранил с pwi
  12. maksimillian Define!!!11 Пользователи

    帖子:
    88
    支持:
    25
    性别:
    Репутация:
    0
    Команда:
    Diamond
    Слухай, ну вот добились мы получения этих чудных байтов.
    Как их изменять-то (на сервере)? :) Есть способ как-нибудь без пакетов или jsp?
  13. TopicStarter Overlay

    Botchal MMORPG-DEVS.RU Пользователи

    帖子:
    182
    支持:
    67
    Репутация:
    0
    Только чтение. Для занесения - сокет.

    ОФФТОП:


    А эти чудные байты - для прочей информации, например экипировка, коты в игре, почтовый ящик в игре, друзья в игре, чат, инвентарь, квесты. И это всё будет также доступтно из MySQL. То, что с этими данными, расфасованными по полочкам, делать, ограничивается лиш фантазией.

    Тоесть мы получаем нормальное чтение. Запись происходит на много реже, тоесть только при редактировании персонажа, при отправке вещей по почте итд, вот тут опасаться нечего и можно использовать сокеты.

    Вот собсно такая идея.
    1 человеку нравится это.
  14. BadGuy Заблокированные

    帖子:
    0
    支持:
    0
    Репутация:
    0
    Команда:
    DLT
    Вот еще бы отправить измененные данные на сервер, а это вроде PutRoleData.
  15. TopicStarter Overlay

    Botchal MMORPG-DEVS.RU Пользователи

    帖子:
    182
    支持:
    67
    Репутация:
    0
    хмм, ну значит ещё проще
  16. maksimillian Define!!!11 Пользователи

    帖子:
    88
    支持:
    25
    性别:
    Репутация:
    0
    Команда:
    Diamond
    В продолжение темы:
    В JSP все на яве же, на PHP тоже яву можно подключить ==> Еще один вариант получения информации. По--моему самый быстрый. Хотя не уверен.
  17. TopicStarter Overlay

    Botchal MMORPG-DEVS.RU Пользователи

    帖子:
    182
    支持:
    67
    Репутация:
    0
    да блин)) айвэб также подключается к 29400, если работать через сокет то уж без посредников.

    ЗЫ тема про получение информации
  18. SviT Наш человек Old school Пользователи

    帖子:
    221
    支持:
    147
    Репутация:
    0
    Спасибо очень интересная инфа.
  19. exclementos Пользователи

    帖子:
    10
    支持:
    5
    性别:
    Репутация:
    0
    Все это интересно но вот у меня такая проблема установил все прописал. захожу на экран он белый. искал все пути все норм. заглянул в логи апача и был немного удивлен, выполня в браузере http://my_ip/server.php?db=listrole
    апачи выкидывает в логах err : Initialize storage environment failed. Как буд то навернулась база но она работает и все норм. при запросе из консоле выдает все данные.
  20. TopicStarter Overlay

    Botchal MMORPG-DEVS.RU Пользователи

    帖子:
    182
    支持:
    67
    Репутация:
    0
    попробуй вместо команды к gamedbd просто vmstat, если выведет - значит всё нормально с использованием системных команд и надо таки прописать права, если нет, то копай php.ini, на самом деле я не знаю, что может означать Initialize storage environment failed. и почему это вообще в логах апача Оо а не gamedbd

    ini_set('display_errors','On'); поставил?
Черновик сохранён Черновик удалён

分享此页面