Управление сервером через XML-RPC - Форум администраторов игровых серверов
Форум администраторов игровых серверов StormWall - Защита от DDos атак
Регистрация Мнения Справка Пользователи Календарь Все разделы прочитаны
Вернуться   Форум администраторов игровых серверов > Полезное / Common > Программирование / Programming > Java

Java В данном форуме вы сможете найти много полезной информации по платформе Java. Подробные статьи, исходные коды и конечно учебники как для новичков так и профессиональных Java разработчиков вы найдёте здесь. Если у вас есть вопрос или хотите поделится своими наработками, пожалуйста, делайте это в этой теме.
Описание темы:Что делать если нет прямого доступа к базе данных сервера?

Ответ
Опции темы
Непрочитано 12.06.2011, 14:03   #1
Пользователь

Автор темы (Топик Стартер) Управление сервером через XML-RPC

Во время разработки своего проекта столкнулся с проблемой - как эффективно управлять сервером с помощью веб-интерфейса. А также как связать сервер, расположенный на нескольких отдельных машинах с сайтом не имея возможности прямого доступа к базе данных сервера.

Конфиг:
* Машина с сервером авторизации и доп.сервисами. Имеет только 1 доступный извне порт (для авторизации)
* Машина с игровым сервером. Имеет только 1 доступный извне порт для игрового сервера.
* Машина с сервером базы данных. Не имеет доступных извне портов.
* Машина с веб-сервером. apache2, PHP 5.3.*. Доступны порты 80, 8080.

Все машины кроме сайта соединены между собой в одну локальную сеть.

Первым что пришло в голову это интергрировать полноценный контейнер сервлетов (jetty, tomcat-embedded) в сервер, установить на него сайт с панелью управления и запускать с сервером. Но идея была сразу отброшена - тратить ресурсы игрового сервера на поддержание сайта панели управления не желательно.

Вторым было использование панели управления на java/jsp с подключением к серверу через RMI либо прямое соединение. Отброшена из-за чрезмерных размеров конечного продукта плюс затраты на хостинг для сайта на JSP.

Третьим было это создание простейшего веб-сервера, на котором будет работать веб-сервис. Сайт будет расположен в другом месте. После долгих экспериментов с Java-WS (soap, xmlrpc) мой выбор остановился на XML RPC. ( http://ws.apache.org/xmlrpc/ )

Разработанная система позволяет выполнять различные операции с сервером в реальном времени без прямого доступа к базе данных.
Основа система - легковесный xmlrpc-server который запускается вместе с сервером на указанном порту.
И через XMLRPC клиент на PHP (из PEAR) можно осуществлять любые операции на сервере.
Система имеет встроенную систему аутентификации пользователей - неавторизованные пользователи не смогут ничего сделать.

Пример простого сервиса для сервера с функцией получения онлайна на сервере.

Код:
@WebService
public interface TestService
{
	@WebMethod
	public int getOnlineCount(boolean includeGm, boolean includeBots);
}
Код:
public class TestServiceImpl implements TestService, GameServerAware
{
	private GameServer gameServer;

	@Override
	public int getOnlineCount(boolean includeGm, boolean includeBots)
	{
		return gameServer.getWorld().countObjects(
			Filter.create()
				.addRule("TYPE", L2Player.class)                        
				.addRule("includeGm", includeGm)
				.addRule("includeBots", includeBots)
		);
	}

	@Override
	public void setGameServer(GameServer gameServer) {
		this.gameServer = gameServer;
	}
}
Хендлер добавляется к списку активных (загружаются по мере надобности ака lazy-init).

Код клиента.

PHP код:
<?php
/**
 * Created by IntelliJ IDEA.
 * User: Aquanox
 * Date: 25.05.11
 * Time: 14:16
 */
require_once 'XML/RPC.php';

$client = new XML_RPC_Client("/xmlrpc""server4.l2server.lan"7115);
$client->setDebug(1);
$client->setCredentials('superadmin''^@HQGE5g54g5W#@R');


// org.aquanox.l2j.ws.services.TestService.getOnlineCount - внутреннее имя с которым можно связать операцию
// для удобства используется имя_класса.имя_метода
$msg = new XML_RPC_Message('org.aquanox.l2j.ws.services.TestService.getOnlineCount', array(
        new 
XML_RPC_Value(true'boolean'),
        new 
XML_RPC_Value(true'boolean')
));

/** @var $responce XML_RPC_Response */
$responce $client->send($msg);

echo 
"Responce is " $responce->value();

?>
В ответ нам приходит наш ткущий онлайн:
Код:
Responce is 1
Таким образом мы можем выполнять любые операции на сервере без прямого доступа к нему в реальном времени с достаточной защищенностью. В разработке поддержка для SSL и дополнительное шифрование передаваемых по сети данных.

В данный момент разрабатывается полноценная среда управления игровым сервером посредством веб-интерфейса.


//add
Ядро серверной стороны системы можно интегрировать практически с любым существующим проектом эмулятора как l2 так и aion. Останется только реализовать специфический функционал и написать панель управления.

Здесь копирайт (с).


Хочу услышать стороннее мнение о разработке.
__________________
for(;Forum.getPostCount() < Integer.MAX_VALUE; Forum.writeNewPost()); | TERA Video | GamezTERA Emu

Последний раз редактировалось Aquanox; 12.06.2011 в 14:31.
Aquanox вне форума Ответить с цитированием
Сказали спасибо:
Непрочитано 12.06.2011, 14:16   #2
Аватар для n3k0nation
Antihero

По умолчанию Re: Управление сервером через XML-RPC

А почему бы не сделать "новые" подпакеты на стадии коннекта к ГС (к примеру) и уже ими рулить? Не надо будет создавать дополнительные сервисы, которые несут нагрузку, правда разработка на PHP усложнится, но все же...

P.S: сам думал над проблемой web-администрования сервера, но остановился на варианте сановского http-сервера, ибо разработка на PHP для меня слишком затратна.
__________________
m0nster.art - clear client patches, linkz to utils & code.
Гадаю по капче.
n3k0nation вне форума Ответить с цитированием
Непрочитано 12.06.2011, 14:20   #3
Пользователь

Автор темы (Топик Стартер) Re: Управление сервером через XML-RPC

Цитата:
Сообщение от ASevenfold Посмотреть сообщение
А почему бы не сделать "новые" подпакеты на стадии коннекта к ГС (к примеру) и уже ими рулить? Не надо будет создавать дополнительные сервисы, которые несут нагрузку, правда разработка на PHP усложнится, но все же...

P.S: сам думал над проблемой web-администрования сервера, но остановился на варианте сановского http-сервера.
моя система работы с сетью работает несколько по другому принципу чем у l2jserver/l2jfree.
Изначально я планировал что панель управления будет на jsp но потом перешел к РНР - это существенно упростит разработку и возможность расширения возможностей панели управления.
И если использовать РНР то нужно писать большооой хак на работу с сетью (подключение к серверу, выполнение запросов). С этой стороны уже реализованный в PEAR пакет работы с веб-сервисом выглядит ярче.

Добавлено через 5 минут
Забыл добавить - сервера гоняются в spring framework контейнере.


Я писал панель управления для aion-emu на jsp/servlet гоняющемся в jetty6. Уже была бета-версия но проект сервера "свернули".
__________________
for(;Forum.getPostCount() < Integer.MAX_VALUE; Forum.writeNewPost()); | TERA Video | GamezTERA Emu

Последний раз редактировалось Aquanox; 12.06.2011 в 14:27. Причина: Добавлено сообщение
Aquanox вне форума Ответить с цитированием
Непрочитано 12.06.2011, 20:21   #4
Аватар для Azagthtot
Эксперт

По умолчанию Re: Управление сервером через XML-RPC

Поддерживаю идею ТС-а всеми имеющимися конечностями.
Сам за стандартизацию "межпроцессных отношений" и XML-RPC на мой взгляд правильный выбор.
А используя ws-xml-rpc от апача, можно сделать достаточно гибкую систему управления, т.к. хендлером может выступать любой класс.
Если ТС-у интересно, есть чуток "облагороженный" ws-xml-rpc (полностью переведен на Log4j, добавлена "прозрачная" защита канала и т.д.).
Связаться со мной можно через ICQ (в профиле) после 13-ого числа.
Azagthtot вне форума Отправить сообщение для Azagthtot с помощью ICQ Отправить сообщение для Azagthtot с помощью Skype™ Ответить с цитированием
Непрочитано 13.06.2011, 13:08   #5
Пользователь

Автор темы (Топик Стартер) Re: Управление сервером через XML-RPC

Цитата:
Сообщение от Azagthtot Посмотреть сообщение
Поддерживаю идею ТС-а всеми имеющимися конечностями.
Сам за стандартизацию "межпроцессных отношений" и XML-RPC на мой взгляд правильный выбор.
А используя ws-xml-rpc от апача, можно сделать достаточно гибкую систему управления, т.к. хендлером может выступать любой класс.
Если ТС-у интересно, есть чуток "облагороженный" ws-xml-rpc (полностью переведен на Log4j, добавлена "прозрачная" защита канала и т.д.).
Связаться со мной можно через ICQ (в профиле) после 13-ого числа.
Заинтересовало. Напишу вам в течении недели, когда появится хоть немного свободного времени.

Что на счет администрирования сервера то ещё есть такая полезная вещь как JMX. С помощью несколько модифицированного JConsole с его помощью тоже можно успешно работать с сервером.



__________________
for(;Forum.getPostCount() < Integer.MAX_VALUE; Forum.writeNewPost()); | TERA Video | GamezTERA Emu
Aquanox вне форума Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Управление инвентарём.. aspalt Серверная часть 7 04.04.2010 07:39
Двери - Gate управление и удаление Дух системы Lineage II 4 22.03.2010 13:16
ГМ-ШОП через Альт+И FreeGoth Работа со скриптами 34 09.02.2010 21:45
Управление серверов через Telnet Dean Lineage II 9 27.07.2009 23:57


© 2007–2024 «Форум администраторов игровых серверов»
Защита сайта от DDoS атак — StormWall
Работает на Булке неизвестной версии с переводом от zCarot
Текущее время: 14:35. Часовой пояс GMT +3.

Вверх