Мысли о хорошем и глобальном (система учёта игроков GoldSrc)

Сообщения
62
Реакции
129
Помог
4 раз(а)
fantom, а какие баги с кодировкой на amx 1.8.3+? Единственный баг с mysql - это зависание при смене карты. Напрямую с mysql - работать быстрее будет. Что нам мешает одним запросом все нужные данные дернуть?

zhorzh78, curl с SoLoader'ом я давно использую в своем плагине для автообновления, с ssl никаких проблем нет, сертификат letsencrypt.
 
Сообщения
2,491
Реакции
2,790
Помог
61 раз(а)
На 183+ уже решен наконец то вопрос с кодировкой; Правда нужно ставить utf8mb4 а не просто utf8
Что нам мешает одним запросом все нужные данные дернуть?
Сильно спорно. Простой кейс стата: в случае с mysql отправляем первый запрос на сохранение данных, второй запрос на получение позиции в топе. Итого нам надо ждать один запрос и после него слать другой. Создание потоков и коннектов не сильно дешевая операция. В случае с API мы с амхх отправляем один запрос. А уже PHP подключился сделал два запроса (мб еще какие то дополнительные если нужно) и отдал ответ. Контроль и простота. А теперь представим что у нас 32 игрока. Итого у нас 32 * 2 запросов. Конешно можна пообьединять запросы. Лично у меня получилось все равно около 10 запросов минмум. Тут снова ж таки 1 запрос к API. ИМХО выгода и простота такого подхода очевидная
17 Сен 2018
Я даже не в курсе какие сейчас имеются.
https://github.com/alldroll/curl_module
 
Сообщения
957
Реакции
1,184
Помог
52 раз(а)
Что нам мешает одним запросом все нужные данные дернуть?
API на то и создано, чтобы все накладные процессы скрыть от конечной реализации и сделать унифицированный интерфейс - не нужно заботиться от структуре таблиц, о типизации данных, о куче вложенных подзапросов (которые не каждый раз можно реализовать). Так же допустим, на сторону апи можно переложить действия, которые нет нужды обязательно проводить на стороне сервера, например, геокодирование по IP. Ну и программа - миниум: апи позволяет грузить сразу готовые объекты, т.е. не список данных из таблицы, а уже саккумулированную инфу по каждому конкретному игроку (стата, баны, привилегии и т.д.)
 
Сообщения
62
Реакции
129
Помог
4 раз(а)
fantom, а что мешает получать позиции из топа в начале раунда для всех игроков (или через 2-3 мин на модах DM), находящихся на сервере? кому нужна моментальная слежка за позицией? кто-то постоянно жмет /rank после каждого убийства?

Sonyx, в этом случае будет зависимость от веба и от базы, т.е. если ляжет nginx, то данные не получить из API, а вот из базы получить, ну а апач еще нагружать будет, так что тут и по нагрузке будет плюс, если 10+ серверов постоянно обновляют данные
 
Сообщения
2,491
Реакции
2,790
Помог
61 раз(а)
@fantom, а что мешает получать позиции из топа в начале раунда для всех игроков (или через 2-3 мин на модах DM), находящихся на сервере? кому нужна моментальная слежка за позицией? кто-то постоянно жмет /rank после каждого убийства?
Один из примеров плагин отображения на сколько позиций поднялся опустился в стате в начале раунда.
17 Сен 2018
т.е. если ляжет nginx, то данные не получить из API,
Если ляжет база, или превисим лимит откритих соединений, получим тот же эффект недоступности. Кстати база часто недоступна.
Ну и плюс security. Особенно если у тебя две ВПС. На одной база на другой сервер. Не надо пробрасивать наружу доступ к ней.
17 Сен 2018
И еще я сильно не люблю драйвер к mysql в amxx. Он банально не дает сделать подготовленный запрос если использовать треды. Понятное дело новый тред новое соединение, а подготовленные запросы работают в пределах сессии (коннекта), но никто не мешает держать пул коннектов в тех же тредах, сделать очередь на запроси и если коннект из пула свободен то сразу же исполнять запрос, иначе положить в очередь и дождаться когда один из коннектов освободиться. Такой подход мне больше нравится.
 
Последнее редактирование:
Сообщения
1,661
Реакции
1,486
Помог
24 раз(а)
И еще я сильно не люблю драйвер к mysql в amxx. Он банально не дает сделать подготовленный запрос если использовать треды. Понятное дело новый тред новое соединение, а подготовленные запросы работают в пределах сессии (коннекта), но никто не мешает держать пул коннектов в тех же тредах, сделать очередь на запроси и если коннект из пула свободен то сразу же исполнять запрос, иначе положить в очередь и дождаться когда один из коннектов освободиться. Такой подход мне больше нравится.
Почему бы просто не использовать постоянное соединение?
 
Сообщения
62
Реакции
129
Помог
4 раз(а)
fantom, ну опять же все это реализуемо, в памяти плагина преждняя позиция, в sql получаем новую, и показываем на сколько позиций он поднялся/опустился

если ляжет mysql, то работать не будет в любом случае и лимит коннектов может вылететь из-за тысячи запросов к api, т.к. новый запрос туда - новый коннект к базе, к тому же у apache и nginx тоже свои лимиты есть

если все на разных тачках, то у api еще дольше ответ может быть, быстрее напрямую к базе обратиться

что касается модуля, согласен, что он не идеален, но что мешает его отредактировать как надо? тут есть шарящие в c++, к тому же в sourcemod реализовано одно асинхронное подключение к бд и там нет бага с зависанием сервера при смене карты, идеи от туда стянуть можно, лично я пытался года 2 назад хоть что-то с ним сделать, но я не смог скомпилить модуль даже без изменений, либо он крашил сервер и забил на это, перепробовал разные либы mysql

в общем у mysql есть 2 весомых преимущества:
1) скорость, с ним будет быстрее
2) зависеть сервер будет только одной программы: mysql, от работы веб-оболочки он не зависит, если сервер шлет много данных - это очень важно, нужно снизить кол-во зависимостей
 
Сообщения
198
Реакции
273
Помог
5 раз(а)
BaHeK, работа уже ведётся. Я за API, ибо работать с ним куда проще, чем пытаться найти решение на ограниченном языке.
1) Скорость при запросах не является ключевым вопросом при работе с БД со стороны сервера (если запрос идёт параллельно работе сервера). Т.е. ожидание 1-2 секунды я считаю допустимым (хотя связка http/mysql сервера отрабатывает куда быстрее)
2) На http сервер мы перекладываем не очень тривиальные задачи (если смотреть с точки зрения pawn/amxx). Там и подстановка параметров, там и экранирование запросов (для избежания инъекций и прочего дерьма), там и валидация, там и ожидание ответа от мускуля, про выполнение нескольких запросов - вообще молчу. (Как скриптер, я сильно подзадолбался работать с callback-функциями. Можешь посмотреть auth system от меня)

С API мы получаем следующее:
- Стандартная и нормализованная база данных;
- Упрощенное и безопасное взаимодействие с ней;
- Возможность масштабирования системы до межсерверного взаимодействия (например, единая бан-система).
 
Последнее редактирование:
Сообщения
2,491
Реакции
2,790
Помог
61 раз(а)
к тому же у apache и nginx тоже свои лимиты есть
Они далеко не 15 откритых соединений
вылететь из-за тысячи запросов к api
Так в том и суть что за один HTTP запрос мы обрабативаем несколько SQL запросов в одном коннекте. Можна правда еще и распаралелить если язык на бэкенде позволяет.

если все на разных тачках, то у api еще дольше ответ может быть, быстрее напрямую к базе обратиться
Разве? тот же пинг если считать что база и веб сервер на одной и той же тачке. Проблемы пользователей которые берут шаред хостинг за 20 руб/месяц не считаем. У них всегда все будет плохо.

года 2 назад хоть что-то с ним сделать
И я питался. Но из за незнаний плюсов тольком ничего и не сделал. Потом когда был свой сервер делал лоадер админок (который и релизнул) и бан систему и стату. И все заканчивалось тонной колбеков запросов напрямую и проблем с этим связанных. В конечном итоге пришол к API и пока что мне нравится.

скорость, с ним будет быстрее
Сомнительно. Без тестов нельзя так с увереностью сказать. Например если я возьму свою любимою ноду (или что еще лучше GO или Elixir) открою там 100 коннектов к базе, сделаю оптимизированые запросы и подготовлю их на всех 100 коннектах. Далее открою 2 сокет соединения (например к RabbitMQ - один для получения инфы, другой для отправки) в треде и буду при любих действиях игрока пушать в очередь собитие, мой бэкенд в ассинхроном коде выполнит запрос к бд, а потом в том же время запушу в другую очередь обновление позиции, на амхх подпишусь на очередь. А если еще и без acknowledge. Одним словом ваш подход с базой будет заметно медленей.

Ух и занесло меня xDDDDDD
 
Сообщения
62
Реакции
129
Помог
4 раз(а)
fantom, в mysql тоже далеко не 15, ну и кто же смодет все это запустить на ноде или go? хостингов практически нет, а с вдс большинство не умеет работать, если проект будет для общего пользования, то тут только на php 7+

BoecSpecOPs, для единой бан системы конечно нет лучше варианта, чем API, в любой момент серверу можно запретить записывать туда данные, ну а callback функции почти везде есть, чем они надоели? самый яркий пример ajax на frontend
 
Сообщения
198
Реакции
273
Помог
5 раз(а)
BaHeK, соглашусь с оратором выше.
Напомню, что в павне:
- Нет динамических строк/массивов. Модули, реализующие динамические массивы нам в этом не помощники - павн не умеет с ними работать. Вышел за границы буфера при построении запроса? Сасай кудасай. А ещё будь добр - обработай ошибку при обращении к базе данных
- Нет Query builder для быстрого и безопасного построения запросов. Для каждого запроса нужно писать новый метод, зачастую дублируя код. Сиди теперь и ломай голову как красиво и без особых усилий расставить запятые при динамическом количестве параметров в запросе к таблице бд. И не забудь защитить запрос от sql-инъекции. В каждом строковом параметре запроса.
- Ты додумался использовать асинхронный запрос? Тогда делай для каждого запроса свой callback. И не забывай обрабатывать ошибки от БД.
- И много других всяких ништяков, которые усложняют жизнь.
 
Последнее редактирование:
Сообщения
327
Реакции
289
Помог
9 раз(а)
curl с SoLoader'ом я давно использую в своем плагине для автообновления, с ssl никаких проблем нет
Речь о другом модуле, без загрузчика
Правда нужно ставить utf8mb4 а не просто utf8
Что за фантазии..
Для каждого запроса нужно писать новый метод, зачастую дублируя код. Сиди теперь и ломай голову как красиво и без особых усилий расставить запятые при динамическом количестве параметров в запросе к таблице бд.
Это вам не копипастить.. Тут нужно еще думать, где поставить запятые.. а так неохота..
Ты додумался использовать асинхронный запрос? Тогда делай для каждого запроса свой callback.
Фантазия №2? Пожалуй, просто чушь либо непонимание работы функций..

В остальном- еще веселее.. Не использовать mysql потому что (трататам) какие-то потоки, задержки и прочее непонятное .. А curl у вас без потоков работает? На воздухе? Отправить тот же самый поток с запросом, потом написать php-код, им отправить запрос в БД, обработать и вернуть на сервер- это никак не проще и не быстрее. Модуль mysql_amxx уже давно не доставляет никаких проблем (если им урон не отлавливать)
Извиняюсь, что вторгся в ваши "фантазии".
 
Сообщения
198
Реакции
273
Помог
5 раз(а)
Речь о другом модуле, без загрузчика
Что за фантазии..
Это вам не копипастить.. Тут нужно еще думать, где поставить запятые.. а так неохота..
Ситуация: мне нужно составить сложное выражение в WHERE, в котором количество параметров может измениться.
Такое случается, если ты работаешь с системой авторизации и тебе нужно сделать выборку по произвольным критериям (nick/ip/steam/pass).

Ещё ситуация: нужно вставить/удалить несколько записей в БД (произвольное).
В этих ситуациях - да, приходится думать над количеством запятых и условных операторов и ведь действительно неохота.

В остальном- еще веселее.. Не использовать mysql потому что (трататам) какие-то потоки, задержки и прочее непонятное .. А curl у вас без потоков работает? На воздухе? Отправить тот же самый поток с запросом, потом написать php-код, им отправить запрос в БД, обработать и вернуть на сервер- это никак не проще и не быстрее. Модуль mysql_amxx уже давно не доставляет никаких проблем (если им урон не отлавливать)
Извиняюсь, что вторгся в ваши "фантазии".
Я изначально писал, что задержки в этом плане не фатальные. Что реально полезно - простота использования.
Составление запросов, обработка ошибок, взаимодействие с базой данных - всё происходит внутри API.

Резюмирую: этот разговор ведёт в никуда. Лично мне идея с этой системой интересна и кажется перспективной. Быть её пользователем вас никто не заставляет.
 
Последнее редактирование:
Сообщения
2,491
Реакции
2,790
Помог
61 раз(а)
Что за фантазии..
Читаем описание. utf8 в мускуле не имеет полную поддержку. Когда игроки будут с emoji в никах сами заметите. Также есть возможность сделать SQL иньекцию при UTF-8. Там некоторие символы неверно распознаються. https://security.stackexchange.com/questions/9908/multibyte-character-exploits-php-mysql.
Это вам не копипастить.. Тут нужно еще думать, где поставить запятые.. а так неохота..
Копипастить любите вы наверно раз так расуждаете
А curl у вас без потоков работает
А если научиться читать не между строк? Я говорил о том что в пределах одного запроса CURL мы делаем несколько запросов SQL. Тупой пример это апдейт статы и получение инфы об игроке. Причем апдейтнуть можна за один запрос сразу всех игроков на сервере. Это будет намного проще на PHP чем на AMXX. Потом второй ньюанс это защита от иньекций. Подготовленные запросы куда более защищены чем эти стоки в AMXX. Опьять таки прикидиваетесь знающим без знаний как такових.
Нам эта разработка интересна и кажется перспективной, поэтому мы ею и занимаемся. Быть её пользователем вас никто не заставляет.
Ну так делайте. Кто вам запрещает. Вопрос что в конечном итоге получете? Еще одно дырявое корыто?
 
Сообщения
327
Реакции
289
Помог
9 раз(а)
Резюмирую: этот разговор ведёт в никуда.
Действительно.. И не только разговор.. Почему?
Потому что:
ведь действительно неохота.
Неохота искать пути осуществления плана.. Вместо этого, половина темы в русле АМХ мод ничего не умеет, модули никакие, скрипты писать и т.д. и.т.п.. Обсуждаете, в большей степени невозможность, или возможные проблемы, вместо того, чтобы что-то начать делать. Так что, счастливого обсуждения.
19 Сен 2018
Опьять таки прикидиваетесь знающим без знаний как такових.
Да куда уж мне до вас..
 
Сообщения
2,491
Реакции
2,790
Помог
61 раз(а)
мод ничего не умеет, модули никакие, скрипты писать
кто бы говорил. Я видел ваш код плагинов. И поверьте мне дальше школьника писателя випок вы не ушли.
Да куда уж мне до вас..
В верном направлении мислете :mosking::mosking::mosking:
19 Сен 2018
Так что, счастливого обсуждения.
Опьять таки любите не зная всей картины расуждать.
OnPaste.20180919-125420.png
 
Сообщения
198
Реакции
273
Помог
5 раз(а)
zhorzh78, я не говорил, что amxx ничего не умеет. Он просто деревянный, связано это непосредственно с ядром PAWN. Уже пилится SPМод у которого больше возможностей, но он ещё сырой.
И ведь самое забавное, что мы таки что-то делаем, а вы как раз обсуждаете нерентабельность предприятия. https://vk.com/images/emoji/D83EDD14.png
19 Сен 2018
Ну так делайте. Кто вам запрещает. Вопрос что в конечном итоге получете? Еще одно дырявое корыто?
Говоришь так, будто мы это на AMXX пишем (хотя доля правды в этом есть) xD
 
Последнее редактирование:

Пользователи, просматривающие эту тему

Сейчас на форуме нет ни одного пользователя.
Сверху Снизу