Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 09.02.2012, 14:08
Новичок на форуме
Отправить личное сообщение для epson Посмотреть профиль Найти все сообщения от epson
 
Регистрация: 09.02.2012
Сообщений: 4

Помогите с архитектурой приложения
Есть небольшое приложение в локальной сети для отслеживания игроков на разных серверах.

Текущая архитектура такая:

Есть два (в будущем больше) источников данных. Для каждого источника написан класс(адаптер) для удобного забора данных. Адаптеры содержат внутри себя таймеры, которые асинхронно обновляют данные с источников. Интервалы обновления(t1,t2) не одинаковые.

Второй частью приложения является список с игроками, за которыми ведется наблюдение. Каждый игрок(User1,User2...) это класс, где содержится инфа о нем. Через определенный интервал времени(t3) осуществляется обновления списка. Классы дергают адаптеры и забирают изменившиеся данные.Если известны ники для двух серверов, опрашиваются два адаптера. Возможна ситуация, когда известен только один ник на одном сервере, в этом случае другой адаптер не опрашивается.

Адаптеры написаны как синглтоны и ссылка на него хранится внутри классов игроков.

Сейчас получается потеря времени в случае когда данные уже обновлены, а время для перебора списка еще не подошло.

Да и вообще получился быдлокод.

Может у кого есть идеи по оптимальной архитектуре для такого приложения.
Изображения:
Тип файла: png Диаграмма1.png (25.9 Кб, 11 просмотров)
Ответить с цитированием
  #2 (permalink)  
Старый 09.02.2012, 14:15
Аватар для poorking
prodigy
Отправить личное сообщение для poorking Посмотреть профиль Найти все сообщения от poorking
 
Регистрация: 01.11.2010
Сообщений: 503

Судя по схеме через t3 перебирается весь список игроков и отправляется запрос адаптеру от каждого. А может лучше завести таймер каждому игроку? То есть проходит t3 времени и объект игрока шлет запрос. Тогда можно будет смотреть внутри объекта игрока, например время обновления пришло, но ответ на прошлый запрос не пришел, оборвать запрос, и послать новый или просто ждать ответа. То есть я думаю что механизм обновления инфы об игроке надо инкапсулировать в самом классе игрока. К тому же не будет такого, что раз в t3 ваши 100500к игроков нападают на сервер чтобы обновить инфу, а будут слать запросы тогда, когда надо
__________________
readOnly

Последний раз редактировалось poorking, 09.02.2012 в 14:18.
Ответить с цитированием
  #3 (permalink)  
Старый 09.02.2012, 14:34
Новичок на форуме
Отправить личное сообщение для epson Посмотреть профиль Найти все сообщения от epson
 
Регистрация: 09.02.2012
Сообщений: 4

Адаптеры используются как прокси данных. Они сами по своей инициативе забирают данные, парсят их и сохраняют в себе. На все запросы статусов игроков возвращаются сохраненные данные( от предыдущего ajax запроса).
Ответить с цитированием
  #4 (permalink)  
Старый 09.02.2012, 14:40
Аватар для poorking
prodigy
Отправить личное сообщение для poorking Посмотреть профиль Найти все сообщения от poorking
 
Регистрация: 01.11.2010
Сообщений: 503

epson,
А, ну тогда можно сделать чтобы игроки не раз в t3 дергали адаптер, а чтобы слушали события адаптера, адаптер обновился - отправил событие, игроки (кому надо) среагировали и обновились, а кому например еще не надо, или не может, запомнили, мол если что, можно обновиться, т.к есть обновленные данные
__________________
readOnly
Ответить с цитированием
  #5 (permalink)  
Старый 09.02.2012, 15:01
Новичок на форуме
Отправить личное сообщение для epson Посмотреть профиль Найти все сообщения от epson
 
Регистрация: 09.02.2012
Сообщений: 4

Да, с событием хорошая идея.
Только вот как отправлять события?
Разве в js можно создавать пользовательские события для своих объектов?
Можно ссылочку или кусочек кода
Ответить с цитированием
  #6 (permalink)  
Старый 09.02.2012, 15:24
Аватар для poorking
prodigy
Отправить личное сообщение для poorking Посмотреть профиль Найти все сообщения от poorking
 
Регистрация: 01.11.2010
Сообщений: 503

Естественно события надо будет вручную отправлять. То есть адаптер скачал инфу, и вызвал у себя this.fireEvent("datareceived", data). А обработчик в свою очередь перебирает всех подписчиков, и передает им что нужно, или только тем кому надо, там уж от специфики приложения зависит. Есть паттерн такой Observer, реализаций тьма. Мне часто приходится пользоваться фреймворком Ext, там все компоненты от него наследуют. Ext.utul.Observable, можете код посмотреть. Если используете jquery, то события можно поджигать методом trigger. Например

var Adapter = function () {
	Adapter.prototype.init.apply(this, arguments);
}


Adapter.prototype = {
	
	players: [],
	
	init: function () {
		jQuery.bind(this, "datareceived", function (data) {
			jQuery.each(this.players, function (player) {
				if ( player.isNeedUpdate() ) {
                                        // или всегда отправлять игроку data, а у игрока завести массив с обновлениями, и если ему надо обновиться, то он обновляется из него
					player.update(data);
				}
			});
		});
	},
	
	downloadData: function () {
		
		var data = doSomething();
		
		jQuery.trigger(this, "datareceived", data);
	},
	
	addSubscriber: function (player) {
		this.players.push(player);
	}
	
}
__________________
readOnly

Последний раз редактировалось poorking, 09.02.2012 в 15:27.
Ответить с цитированием
  #7 (permalink)  
Старый 09.02.2012, 15:32
Новичок на форуме
Отправить личное сообщение для epson Посмотреть профиль Найти все сообщения от epson
 
Регистрация: 09.02.2012
Сообщений: 4

Большое Спасибо!
Это как раз то, что мне было нужно
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ПОМОГИТЕ!!! JavaScript aktau07 Общие вопросы Javascript 9 03.10.2011 23:10
Помогите с replace! faforty Общие вопросы Javascript 2 28.08.2011 13:10
Приложения для распознания лиц на телефоне через камеру Сильная сторона человека Оффтопик 1 22.08.2011 15:14
Помогите! Многоуровневые вкладки! sergeeeeee Элементы интерфейса 2 02.08.2010 23:50
Помогите разобраться с галереей IMAGIN yana_studio Общие вопросы Javascript 4 12.12.2009 17:24