Правила форума Гаранты форума
Размещение рекламы AMX-X компилятор

Здравствуйте, гость Вход | Регистрация

Наши новости:

14-дек
24-апр
10-апр
11-апр

> Правила форума

Этот раздел, как вы могли заметить по названию, предназначен для решения вопросов по поводу уже существующих модов и плагинов.
Пожалуйста, если у вас проблема с написанием плагина, не путайте этот раздел с разделом по скриптингу.
Для поиска плагинов и модов существует соответствующий раздел.

Название темы должно соответствовать содержанию. Темы с названием типа "Помогите", "Вопрос", "парни подскажите..." - будут удалены.
Все темы, не относящиеся к "Вопросам по модам и плагинам", будут удалены или перемещены в соответствующий раздел.

Правила оформления темы:
1. Помимо заголовка не забудьте верно сформулировать свой вопрос.
2. Выложите исходник (в тег кода + ) или ссылку на плагин который вызывает у вас вопросы.
3. Выложите лог с ошибками (если имеется) под спойлер

Amx Коннект К Mysql Vs Socket Apache + Php

Статус пользователя Metal Messiah
сообщение 26.2.2013, 1:41
Сообщение #1


Иконка группы

Стаж: 13 лет

Сообщений: 2457
Благодарностей: 1482
Полезность: 770

HostGame.cf
Доброго времени суток!

Возник философский вопрос:
Почему плагины, начиная от AMXBans и заканчивая аналогами xredirect, используют прямой коннект к БД MySQL с небезопасной передачей и хранением пароля вместо того чтобы делать запросы через сокет на PHP скрипт который проверяет права и выдает нужную информацию в нужном формате?
Допустим это оптимально и безопасно если сервер один и в БД кроме таблицы этого плагина ничего нет. Но во всех остальных случаях?
В большинстве плагинов отсутствует контроль ошибок mysql, который в том же PHP делается элементарно, действие слетает.
Если уже игровой сервер использует такие плагины, значит к нему в комплекте уже идет БД а значит хостинг либо свой VPS или физический сервер.
А если есть это - почему бы не PHP?

Например я уже достаточно хорошо разбираюсь в разработке amx плагинов, но PHP знаю лучше, и мне намного проще сделать плагин из одной строки которая открывает в motd url с передачей STEAM_ID игрока, а PHP делает все остальное и выводит требуемую информацию (будь то /top или еще что). Это открывает намного больше возможностей и экономит кучу времени, в том числе потому что на PHP выходит меньше букв. У меня так же сделан аналог join_ip который нормально определяет город в отличие от использующих geoip.

Уважаемые гуру, какие минусы такого подхода я не заметил?
(Собираюсь делать свою систему регистрации ников с преферансом и барышнями к уже существующему сайту. Использование mysql пароля на игровом сервере даже в зашифрованном виде не допустимо из соображений безопасности.)

Отредактировал: Metal Messiah, - 26.2.2013, 1:43


Полезные публикации - ссылки у меня в профиле. Ссылка на плагин против спама на сервере StopServerSpam там же.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
Статус пользователя hacker1990
сообщение 26.2.2013, 7:16
Сообщение #2
Стаж: 15 лет

Сообщений: 52
Благодарностей: 8
Полезность: 29

Опаа. Единомышленник. Я делаю тоже самое, но на SAMP( pawno).
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя mittagswind
сообщение 26.2.2013, 7:23
Сообщение #3


Стаж: 13 лет

Сообщений: 102
Благодарностей: 14
Полезность: 112

1) БД обычно ставится на тот же хост, что и игровой сервер, для улучшения быстродействия. в этом случае будет самый безопасный коннект к localhost :D
2) если БД удаленная - все запросы к ней идут через маршрутизаторы. Вероятность того, что где-то в маршрутизаторе провайдера сидит спец.прога твоих конкурентов, снифающая трафик крайне мала 8-)
3) То, что в большинстве плагинов нет обработки ошибок MySQL при наличии такой поддержки в AMX - это не больше, чем криворукость разработчиков этих плагинов. Ни одна программа не застрахована от ошибок - золотое правило разработки.
4) нужно четко определиться, какая задача нужна: только сохранить данные - используй MySQL. вызвать функционал сторонней системы, реализующий какие-то действия - используй PHP.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя mazdan
сообщение 26.2.2013, 8:15
Сообщение #4


Иконка группы

Стаж: 15 лет

Сообщений: 7566
Благодарностей: 5437
Полезность: 1305

mysql - транзакционная система и действия в случае ошибок слетают на уровне mysql - или выполнено или нет.
Контроль ошибок точно такой же как на php - mysql сервер возвращает ошибку.

motd - это один вопрос, для bans уже будет сложнее. Вам нужно отправить сокет и проверять его пока не отработает ваш php сервер - по умолчанию это фриз на сервере, если сделать поаккуратнее + где-то были более толковые socket модули то можно сделать и на сокетах. Вопрос "Зачем?"
Я понимаю ваш уклон на безопасность, но на mysql быстрее. Что вам мешает скриптом пулять данные в отдельную бд\таблицу и на сервере использовать пользователя с доступом только к ней? По сути вы хотите сделать прослойку на php - это дополнительное звено, которое снизит надежность и быстродействие системы.


Не пишите мне в ЛС. Пишите на почту. В ЛС я пропускаю сообщения.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя Metal Messiah
сообщение 26.2.2013, 11:31
Сообщение #5


Иконка группы

Стаж: 13 лет

Сообщений: 2457
Благодарностей: 1482
Полезность: 770

HostGame.cf
Если БД на том же сервере то и Apache+PHP там же. По времени отклика разницы никакой.
Можно конечно сказать что подключение к mysql перманентное и это экономит некоторое время, но оно может упасть и это надо проверять.

Если 2 игровых сервера используют одну БД причем 1 сервер на другом VPS - значит коннект к БД доступен извне. А раз так значит кто-то может сломать сервер и получить значение переменной пароля mysql, подключиться извне и DROP TABLE. ДАже если DROP запретить юзеру, он может сделать UPDATE/DELETE.

а с PHP и вебсервером главное не плодить процессы апача, настроить так чтобы выполнялось быстро и освобождало память вовремя.

Цитата
какая задача нужна: только сохранить данные - используй MySQL

если так то проще данные выводить в лог, а потом кроном логи парсить как это психостатс делает - никакой нагрузки.

Отредактировал: Metal Messiah, - 26.2.2013, 11:31


Полезные публикации - ссылки у меня в профиле. Ссылка на плагин против спама на сервере StopServerSpam там же.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя mazdan
сообщение 26.2.2013, 11:48
Сообщение #6


Иконка группы

Стаж: 15 лет

Сообщений: 7566
Благодарностей: 5437
Полезность: 1305

Ну разрешен у вас коннект к БД с этого айпи ну и что с того то?
БД + ПХП это не БД. Не бывает так.
Вам не нужно давать права на UPDATE если он не нужен.
Если нужен - выдаете права на таблицу, в которой он нужен. Что такого страшного может произойти? Какие вы данные хотите апдейтить? Если вы говорите "сервер ломанут" то что помешает тогда проапдейтить таблицу через ваш php шлюз? Айпи тот же, все данные те же - взлом с вашего же сервера.


Не пишите мне в ЛС. Пишите на почту. В ЛС я пропускаю сообщения.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Metal Messiah
сообщение 26.2.2013, 21:54
Сообщение #7


Иконка группы

Стаж: 13 лет

Сообщений: 2457
Благодарностей: 1482
Полезность: 770

HostGame.cf
Вообщем я так понял что ничего плохого в работе через PHP шлюз нет и можно так делать :)


Полезные публикации - ссылки у меня в профиле. Ссылка на плагин против спама на сервере StopServerSpam там же.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Fred Perry
сообщение 26.2.2013, 21:59
Сообщение #8


Иконка группы

Стаж: 16 лет

Сообщений: 6594
Благодарностей: 2370
Полезность: 813

Цитата(Metal Messiah @ 26.2.2013, 21:54) *
Вообщем я так понял что ничего плохого в работе через PHP шлюз нет и можно так делать :)

Нету необходимости выдумывать велосипед.


Гнилой фашистской нечисти
Загоним пулю в лоб,
Отродью человечества
Сколотим крепкий гроб!
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя mazdan
сообщение 27.2.2013, 7:48
Сообщение #9


Иконка группы

Стаж: 15 лет

Сообщений: 7566
Благодарностей: 5437
Полезность: 1305

Metal Messiah, ну посмотрите как там с сокетами будет - дайте знать потом, т.к. может получиться как непотоковые mysql запросы т.е. с фризами сервера


Не пишите мне в ЛС. Пишите на почту. В ЛС я пропускаю сообщения.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Metal Messiah
сообщение 27.2.2013, 16:23
Сообщение #10


Иконка группы

Стаж: 13 лет

Сообщений: 2457
Благодарностей: 1482
Полезность: 770

HostGame.cf
Если делать через set_task то не должно быть фризов. Если же будет таймаут в socket_connect или socket_send в основном потоке - то да. У меня именно так сделан join_ip но проблем почти не наблюдается. Есть одна проблема когда в переменную plcity[id] прописывается строка "КиевДонецк" или типа того, причину понять не могу. Все в отдельных потоках set_task с id_base+player_id, при дисконнекте таски убиваются, при дисконнекте и коннекте переменные очищаются... Вообщем где-то потоки пишут в общую память хотя не должны.


Полезные публикации - ссылки у меня в профиле. Ссылка на плагин против спама на сервере StopServerSpam там же.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
  Тема закрытаНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: