Страница 1 из 3 123 ПоследняяПоследняя
Показано с 1 по 10 из 27

Тема: Использование возможностей PHP в PAWN

  1. #1
    Джентльмен лжец Аватар для Fallen A.
    Регистрация
    03.09.2011
    Адрес
    Минск, БССР
    Возраст
    29
    Сообщений
    2,409
    Репутация: 337

    Звание: как роза среди колючек

    Использование возможностей PHP в PAWN

    Предыстория:


    не так давно я столкнулся с проблемой многопоточных запросов при написании системы сообщений для своего проекта. Суть проблемы в том, что нужно было всего лишь посчитать количество Входящих и Исходящих сообщений одного конкретного пользователя. Пользуюсь я, к слову говоря, плагином MySQL R7 от BueG. Так вот, все в принципе решаемо, однако, для каждого запроса приходилось бы создавать свой, отдельный Public -> именно так разработчик решил проблему многопоточности... Вроде бы все нормально, два запроса == два паблика, ничего плохого, вот только... Вот только то, что с каждым, грубо говоря, новым запросом потребуется и новый Public... Это просто загрязнение кода...

    Решение проблемы:

    на самом деле я нашел в интернете кучу всего полезного, однако, никак не подходившего под мои нужды. Спустя некоторое время после начала поиска, пришлось остановиться на такой замечательной функции, как HTTP();.

    Немного введения в курс дела:
    Функция доступна с версии 0.3b и с помощью её мы можно отправлять HTTP запрос и получать ответ.

    Параметры функции:
    PHP код:
    (indextypeurl[], data[], callback[])

    index ID (playeridgiveplayerid)
    type тип запроса который вы хотите отправить
    url
    [] - URL запроса (без "http://")
    data[] - любое сообщение данных которое будет отправлено с запросом
    callback
    [] - Название функции обратного вызова если вы хотите использовать для обработки ответов на этот запрос

    Типы запросов(type):

    PHP код:
    HTTP_GET Отправляет запрос на http.

    HTTP_POST Отправляет запрос с данными.

    HTTP_HEAD Отправляет запрос HTTPно игнорирует любые данные ответа возвращение только код ответа

    Коды ответов:

    PHP код:
    HTTP_ERROR_BAD_HOST                     1
    HTTP_ERROR_NO_SOCKET                    2
    HTTP_ERROR_CANT_CONNECT                 3
    HTTP_ERROR_CANT_WRITE                   4
    HTTP_ERROR_CONTENT_TOO_BIG              5
    HTTP_ERROR_MALFORMED_RESPONSE           6 
    А так же стандартные коды ответов:
    PHP код:
    HTTP 404 (страница не найдена), 500 (ошибка сервераили 403 (запрещено
    Более глубоко в описание и приведение примеров работы функции я вдаваться не буду. Кому нужно -> в интернете достаточно информации для персонального штудирования.


    Теперь перейдем к тому, как же я применил эту функцию на практике и в своем решении:


    В моем случае HTTP взаимодействует с PHP файлом на сервере, отправляя ему определенный запрос и получая зашифрованный ( если это потребуется ) ответ, который позже расшифровывается и далее уже используется по необходимости.

    Пример:


    PHP код:
    /* В самый верх "мода" */
    #define PHP_FILE_LOCATION "адрес/Название.php" // Web-адрес ( путь ) до вашего PHP файла ( без http:// )
    #define SECURITY_CODE "12345" // Ключ безопасности. Используется для предотвращения несанкционированного доступа к php файлу
    #include <a_php> 

    это рабочий код, в котором я хочу получить количество Принятых/Отправленных сообщений определенным пользователем.

    PHP код:
    new parameters[24], switch_case[24] = "inputAndOutputMessages";
    format(parameterssizeof(parameters), "%s"getName(playerid));
    RunMySQLQuerySwitch(100switch_caseparameters); // Отправляем запрос 
    PHP файл:

    PHP код:
    define('SECURITY_CODE''Тут ключ безопасности, который должен совпадать с ключом из кода Pawn');
    if(
    $_POST[security] == SECURITY_CODE)
    {
        
    $caseQuery mysql_real_escape_string($_POST[switch_case]);
        if(!empty(
    $caseQuery))
        {
            switch(
    $_POST[switch_case])
            {
                case 
    "inputAndOutputMessages":
                    
    // Тут то, что мы хотим сделать.
                
    die;
                break;
            }
        } else {
            echo 
    'Error.';
        }
        
    } else {
        echo(
    'Wrong Security Code');

    Сам [INC] a_php.inc
    PHP код:
    /*
            PHP Library Fallen A. ( AlexandeR )
            ver.  0.1a
    */
     
    #include <a_http>
     
    #define MAX_PHP_LENGTH 256
     
    forward OnServerTryingToRunPHP(indexresponse_codedata[]);
    forward OnScriptResponse(scriptidcontents[]);
     
    stock RunMySQLQuerySwitch(scriptid, const switch_case[], const parameters[])
    {
            new 
    string[MAX_PHP_LENGTH+5];
            
    format(stringsizeof(string), "switch_case=%s&parameters=%s&security="SECURITY_CODEswitch_caseparameters);
            
    HTTP(scriptidHTTP_POSTPHP_FILE_LOCATIONstring"OnServerTryingToRunPHP");
    }
     
    public 
    OnServerTryingToRunPHP(indexresponse_codedata[])
    {
            if(
    response_code != 200)
            {
                    
    printf("Error: %d, trying to compile PHP on external server."response_code);
                    return 
    0;
            }
            
    CallLocalFunction("OnScriptResponse""ds"indexdata); // Возвращаем ответ в Pawn код
            
    return 1;

    Обработка ответа сервером:

    PHP код:
    public OnScriptResponse(scriptidcontents[])
    {
        if(
    scriptid == 100// Указываем, что нужно делать с запросом определенного ID
            // Тут действие
                // При желании можно обрабатывать запросы, полученные с кодирование [B]base64[/B]
        
    return 1;


    Я не знаю, насколько это работает быстрее плагина, однако, позволяет использовать некоторые возможности и преимущества PHP.
    Единственное, что пока достоверно известно -> скорость получения информации напрямую зависит от скорости отправки, обработки и обратного возвращения запроса.

  2. 6 пользователей сказали cпасибо Fallen A. за это полезное сообщение:

    Bob_Marley (09.06.2015), Dante_Codeo (09.07.2015), Dr.Deft (10.06.2015), Nikifor (08.06.2015), Seregamil (09.06.2015), Yung Lean (08.06.2015)

  3. #2
    PYREX Аватар для Yung Lean
    Регистрация
    26.08.2011
    Адрес
    Latvia
    Сообщений
    828
    Репутация: 55

    Звание: скоро придёт к известности

    Re: Использование возможностей PHP в PAWN

    Это божественно, прекрасно я кончил.
    Снова на форуме после долгого отсутствия
    Cкайп:spartanec123456789


    PHP код:
    Чем больше хочешьтем чаще хочется… 
    PHP код:
    За я не когда не гонюсь и гнаться не буду 

    Цитата Сообщение от ahmet94 Посмотреть сообщение
    кстати мне нло нетоело они меня арут ковуто я лол Хд я им зарвал ракету заницу !!
    Цитата Сообщение от ahmet94 Посмотреть сообщение
    Дабавил Гаражи Он появиться тачки от гаражи
    убрал увас нет в ключей поставил вы не стоитесь

  4. #3
    Джентльмен лжец Аватар для Fallen A.
    Регистрация
    03.09.2011
    Адрес
    Минск, БССР
    Возраст
    29
    Сообщений
    2,409
    Репутация: 337

    Звание: как роза среди колючек

    Re: Использование возможностей PHP в PAWN

    Цитата Сообщение от NEQAS Посмотреть сообщение
    Это божественно, прекрасно я кончил.
    :buba:

  5. #4
    Активный пользователь
    Регистрация
    17.02.2015
    Возраст
    27
    Сообщений
    88
    Репутация: 27

    Звание: на пути к лучшему

    Re: Использование возможностей PHP в PAWN

    а разве HTTP() многопоточен?

    ________________ Сообщение добавлено в [06:34] ________ Предыдущее сообщение в [06:20] ________________

    да и вообще, тут офигенная нагрузка: исполнение кода pawn + работа web сервера + выполнение php + нагрузка со стороны mysql
    и так каждый запрос

  6. #5
    Истеричка
    Регистрация
    11.12.2011
    Возраст
    26
    Сообщений
    2,324
    Репутация: 323

    Звание: как роза среди колючек

    Re: Использование возможностей PHP в PAWN

    Функция сама по себе медленная, но решение хорошее.
    работа web сервера + выполнение php
    Это то тут причем? сайт и сервер не одно и то же.
    исполнение кода pawn
    Открой РЛС.

  7. 1 пользователь сказал cпасибо Seregamil за это полезное сообщение:

    Fallen A. (09.06.2015)

  8. #6
    Джентльмен лжец Аватар для Fallen A.
    Регистрация
    03.09.2011
    Адрес
    Минск, БССР
    Возраст
    29
    Сообщений
    2,409
    Репутация: 337

    Звание: как роза среди колючек

    Re: Использование возможностей PHP в PAWN

    Цитата Сообщение от Seregamil Посмотреть сообщение
    Функция сама по себе медленная, но решение хорошее.

    Это то тут причем? сайт и сервер не одно и то же.

    Открой РЛС.
    Функция открывает некоторые возможности php для использования. Вечером обновлю тему.

  9. #7
    Активный пользователь
    Регистрация
    17.02.2015
    Возраст
    27
    Сообщений
    88
    Репутация: 27

    Звание: на пути к лучшему

    Re: Использование возможностей PHP в PAWN

    Цитата Сообщение от Seregamil Посмотреть сообщение
    Это то тут причем? сайт и сервер не одно и то же.
    А кто говорил, что это одно и то же? :an: Я сказал, что идет работа интерпретатора php + обработка запроса http() Web сервером

    ________________ Сообщение добавлено в [07:40] ________ Предыдущее сообщение в [07:38] ________________

    Цитата Сообщение от Fallen A. Посмотреть сообщение
    Функция открывает некоторые возможности php для использования. Вечером обновлю тему.
    php и так до ужаса медленный, а тут его еще и к pawn'y приплетать xd

  10. #8
    Джентльмен лжец Аватар для Fallen A.
    Регистрация
    03.09.2011
    Адрес
    Минск, БССР
    Возраст
    29
    Сообщений
    2,409
    Репутация: 337

    Звание: как роза среди колючек

    Re: Использование возможностей PHP в PAWN

    Цитата Сообщение от flynn Посмотреть сообщение
    А кто говорил, что это одно и то же? :an: Я сказал, что идет работа интерпретатора php + обработка запроса http() Web сервером

    ________________ Сообщение добавлено в [07:40] ________ Предыдущее сообщение в [07:38] ________________


    php и так до ужаса медленный, а тут его еще и к pawn'y приплетать xd
    Что он медленный, я и так знаю. Не нравится код - выскажите своё мнение по его улучшению. Дальнейшие ваши слова не по теме будут приравниватся к флуду и оффтопу с соответствующим наказанием.

  11. #9
    Истеричка
    Регистрация
    11.12.2011
    Возраст
    26
    Сообщений
    2,324
    Репутация: 323

    Звание: как роза среди колючек

    Re: Использование возможностей PHP в PAWN

    Цитата Сообщение от flynn Посмотреть сообщение
    А кто говорил, что это одно и то же? :an:
    тут офигенная нагрузка
    Подразумевается нагрузка и на сайт, и на сервер в целом, как я понял

  12. #10
    Активный пользователь
    Регистрация
    17.02.2015
    Возраст
    27
    Сообщений
    88
    Репутация: 27

    Звание: на пути к лучшему

    Re: Использование возможностей PHP в PAWN

    Цитата Сообщение от Fallen A. Посмотреть сообщение
    Что он медленный, я и так знаю. Не нравится код - выскажите своё мнение по его улучшению. Дальнейшие ваши слова не по теме будут приравниватся к флуду и оффтопу с соответствующим наказанием.
    ты мне не угрожай, и это не оффтоп, я говорю и скорости работы твоего "Решения проблемы" многопоточности.
    в твоем случаее улучшения не помогут, ибо сам способ - бред, и я написал выше почему

Страница 1 из 3 123 ПоследняяПоследняя

Похожие темы

  1. [Урок] Использование Y_Timers
    от RastaOrecha в разделе Pawn WIKI
    Ответов: 34
    Последнее сообщение: 19.09.2013, 21:29
  2. Использование Pvar
    от sscanf в разделе Вопросы по скриптингу
    Ответов: 5
    Последнее сообщение: 29.08.2013, 18:03
  3. [Урок] Использование SetObjectMaterial
    от EvgeN 1137 в разделе Pawn WIKI
    Ответов: 27
    Последнее сообщение: 02.08.2013, 14:18
  4. Использование return;
    от weID! в разделе Вопросы по скриптингу
    Ответов: 7
    Последнее сообщение: 24.07.2013, 00:14

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •