Показать сообщение отдельно
Непрочитано 07.08.2010, 01:37   #40
Пользователь

По умолчанию Re: Создание движка сервера (L2)

Цитата:
Сообщение от pitch Посмотреть сообщение
Всем привет, есть предложение создать серверный двиг(нормальный) с использованием ORM(JPA,Hibernate), XoRM(JAXB,Xstream), Spring, SocketAPI Netty и тд. просто глядя на код l2j, хочется расстрелять тех, кто это писал. Если есть желающие с отменным знанием J2EE, Spring, Orm. Можно попробовать сделать лучше чем есть. Разработка закрытая.
как вариант:

DI/AOP - guice, NIO - netty
dao - склоняюсь в сторону jdbc (пул + кэш + ap. dbutils)
data - поддержка любого вида загрузки - jaxb/db

структура проекта:

-commons
-gs-api
-ls-api
-gs-l2/aion
-ls-l2/aion

правила:
- вынос части игрового функционала в API - любая игра (l2/aion/tera) содержит квесты/скилы/аукцион и т.д. Различия в пакетах и последовательности действий - реализуется на нижнем уровне.
- каждый функционал в идеале не зависит от другого (движок квестов можно включить/выключить убрав загрузку одного модуля Guice)
- запрет на DI после старта или в редких исключениях (бережем cpu)
- горячая перезагрузка только данных (перезагрузка целых модулей используя свои CL или даже OSGI дает неоправданную сложность, на мой взгляд)
- commons/api предоставляют интерфейсы как основу для функционала - это позволяет биндить к любой реализации вплоть до хардкодного дао в тестах:
Код:
public class DummyAccountDAO implements AccountDAO {
	@Override
	public Account loadAccount(String name) {
		Account account = new Account(1);
		account.setName(name);
		account.setPasswordHash(name);
		account.setStatus(0);
		return account;
	}
}
- никаких статических сервисов

в целом это все позволит в будущем не писать с нуля сервер для новой игры.

проблемы: имея такой не кислый уровень абстракции очень трудно найти подходящую команду или из-за разного видения на конечный продукт разработка может зайти в тупик.
ATracer вне форума Ответить с цитированием