Svarga
Moderator | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Приветствую! Пока что куча сырых несформулированных толком идей, мало ли, может что-то и получится из этого... Началось с того, что в одной теме в "Помощи по Ru.Board" промелькнула идея по поводу создания CD с информацией с Ру-Борда, благодаря ironwitу, идея постепенно мутировала в идею написания клиентской и серверной части для форума с целью экономии трафика (за счёт создания локальной базы просмотренных тем/постов и отсутствия повторного скачивания одного и того же) и для возможности офлайновой работы с форумом (возможность офлайнового доступа ко всем просмотренным темам/постам, возможность офлайновой подготовки ответов и т.д.). Чтобы могла появиться возможность что-то подобное использовать на ру-борде, необходимо, чтобы существовало что-то более-менее рабочее (не считая, конечно, самой малости — согласия админов). Поэтому, по мере возможностей, будем пытаться сделать нечто подобное сначала для Ib2, а потом... А потом видно будет... (дожить до этого "потом" ещё надо ) Вообщем, пока что разрабатываем техзадание (точнее, пока что есть просто набор идей, из которых, возможно, и будет окончательно подробно расписано задание), а чем это всё закончится — даже не знаю , само собой, к обсуждению приглашаются все желающие. Предполагаемые этапы работы: 1. Разработка подробного ТЗ для серверной и клиентской части, описывающего формат запросов клиента, формат выдаваемых сервером данных, механизмы взаимодействия клиентской и серверной частей, принципы и механизмы работы серверной и клиентской частей. 2. Создание серверной части согласно ТЗ 3. Создание клиента (-ов) для работы с серверной частью согласно ТЗ. 4. Тестирования, исправления глюков и под. Что надумали Стало быть, попытался начать обобщать всё, что уже надумали (что забыл — просьба дополнить, где ошибся, просьба подправить, также новые идеи настоятельно приветствуются ): 1. Серверная часть Отдельный серверный скрипт, который выдаёт определённые данные на определённые http-запросы. 2. Клиентская часть Пользовательская программа, которая формирует определённые запросы к серверу, получает, обрабатывает, хранит и выдаёт полученные от сервера данные в определённом виде. Варианты реализации программы: а) локальный HTTP-сервер, который перехватывает запрос браузера к серверу форума и, если запрашиваемые данные доступны локально, формирует на основе локальной базы HTML-страницу и выдаёт её браузеру, если же данные недоступны локально, переформулирует запрос, обращается к серверу, получает запрашиваемые данные, добавляет их в локальную базу, формирует HTML-страницу в соответствии с запросом и выдаёт её браузеру; б) приложение, которое непосредственно обращается к серверному скрипту, формирует базу сообщений и отображает имеющиеся в базе данные (организованное аналогично почтовым клиентам) В принципе, оба варианта можно совместить. 3. Формат данных Варианты формата выдаваемых сервером данных: а) XML, напр. Код: <message author="Svarga" date="02:19 24-03-2003"><b>Hrun</b> <quote><quote>Хотя траффик упадет реально. И для сервера и для клиентов. </quote> счетчики, баннеры... кто же на такое согласиться.. </quote> и еще куча проблем, о которых я говорил раньше.</message> | б) Текст с определёнными разделителями (| или, скажем, \n): Код: Svarga|02:19 24-03-2003:<b>Hrun</b><br>[q][quote]Хотя траффик упадет реально. И для сервера и для клиентов.[/quote]<br>счетчики, баннеры...<br>кто же на такое согласиться.. [/q]<br>и еще куча проблем, о которых я говорил раньше. | (наподобие того, как сообщения хранятся в текстовой базе Ib2) Второй вариант меньше весит и проще для реализации, поэтому XML отдыхает На сервере, чтоб не дублировать существующую базу сообщений, рационально использовать существующую базу (если всё же создавать отдельную серверную базу, то принципы её организации описаны ниже). Вопрос по локальной базе клиента остаётся открытым. 4. Unsorted (голова уже не варит сегодня, просто цитаты для последующего разгребания на досуге): Цитата: Далее программа смотрелка загружает все это и каким то образом отображает юзеру(можно обдумать отдельно) Далее - когда по расписанию приходит время проверки обновлений - она проверяет даты всех txt файлов, те у когторых дата изменилась - обновляются с того места, до которого есть данные у программа(нужна поддержка докачки на сервере). | Цитата: устроить в нём нормальный внешний вид форума (скачали основной индекс, проанализировали данные, повесили на шаблон), при заходе в раздел скачиваем индекс.тхт раздела, анализируем, вешаем данные на шаблон, показываем... если это первый заход в раздел-- можно, конечно устроить и загрузку всех индексов раздела-- но это будет тяжкое занятие, посему для начала загружаем только индексы с данными об определённом количестве новых постов-- чтоб отобразить нужное количество заголовков с датами, ссылками и т.п., и при последующих заходах скачиваем только последние обновлённые индексы. На основе данных об общем количестве постов выводим ссылки на остальные страницы раздела (1 2 3 4 ...), т.е. клиент внешне ведёт себя как браузер (а на самом деле является хитрым локальным сервером ) и собирает локальную базу по мере посещения отдельных тем/разделов. | Цитата: Алгоритмы... Алгоритм первого подключения (Есть настройки за сколько дней обновлять, какие темы, разделы...) 1. Скачать главный индекс. 2. Скачать индексы всех тем, дата обновления редактирования подходит под настройки. 3. Скачать все посты( или требуемое их кол-во сначала или конца) всех тем и файлы edit.txt - если они есть. 4. Проверить на обновление и скачать layout.txt. Алгоритм последующих подключений. 1. Повтор алгоритма первого подключения - с учетом уже скачанной информации. 2. Проверка тем с ответами подготовленными в оффлайне и их отправка\редактирование. | Цитата: При такой структуре будет проблема с общим размером (можно загонять текстовые файлы в архивы, а на стороне клиента распаковывать и обрабатывать, хотя, подозреваю, что это не сильно решит проблему). | Цитата: разбить по кускам конечно можно, но зачем? Ведь этот файл будет качатся только один раз а потом обновляться(докачиваться) только в случае ДОБАВЛЕНИЯ темы. А даты по соответствующим темам(обновления темы) можно брать из даты создания соответствующего index.txt - которая меняется при каждом посте. | Цитата: чтоб не возиться с генерацией всех этих файлов (т.е. по сути не дублировать на сервере базу сообщений), можно написать скрипт для генерации и выдачи содержимого этих файлов при соответствующем запросе (напр., идёт запрос httр://site.com/client.cgi/1/1/index.txt — скрипт client.cgi генерит и выдаёт в нужном формате содержимое индекса первой темы раздела №1, преимущества: можно авторизировать посетителя и не выдавать гостям и всяким ботам информацию из members-only разделов — типа Варезника, или вообще — выдавать при USER_AGENT, отличном от юзер-эджента клиента, нормальные страницы — будет заодно решением по псевдостатическим страницам | Цитата: в корне лежит index.txt с содержанием | Цитата: в основном индексе находится список форумов с данными о времени последнего обновления, в индексах каждого раздела находятся данные о темах, включая даты последнего обновления и т.д. Т.е. при обновлении производится загрузка основного индекса и делается проверка соответствия дат обновления разделов посредством сравнения с датами обновления в локальной копии индекса, если что-то обновилось, пользователь выбирает, какие разделы обновить-- производится загрузка индексов определённых разделов, соответственно, вычисляются даты обновления тем и новые темы (при многостраничных индексах разделов-- если последняя тема в index.txt новая, то загружается indexN.txt, где N-- общее число индексов раздела, указанное в index.txt, если последняя тема в indexN.txt также новая-- загружается index(N-1).txt и т.д.). Аналогично и с темами: загружаем индекс новой темы и смотрим на даты постов-- те, что новые-- загружаем. | Цитата: ндексы форума с данными по, скажем, 20-30-ти темам (скажем, index.txt, index1.txt, index2.txt... indexN.txt, причём в index.txt нужно будет добавить общее количество индексов данного раздела)... В index.txt должны храниться данные о новейших темах, в index1.txt-- о самых древнейших, в index2.txt о менее древнейших... и т.д.: нумерация индексов в обратном порядке с нулевым index.txt позволит избежать необходимости редактировать все индексные файлы при добавлении новой темы (т.е. сдвигать по всем файлам все записи на одну).. | Цитата: Cтруктура /index.txt # главный индекс форума, в нём # живут названия разделов, ссылки на индексы разделов # и дата обновления шаблона # (а также, возможно, данные о последнем посте в каждом разделе) /layout.txt # файл с данными по внешнему виду всех страниц-- скрипты, CSS, HTML, # возможно, ссылки на картинки, которые отсутствуют в дистрибутиве клиента # т.е. с самим клиентом также идут основные картинки (смайлики, аватары), # а сюда забрасываем ссылки на новые смайлики и аватары, чтоб они # заранее скачивались. /1/index.txt (/1/index1.txt и т.д.) # индекс раздела №1: здесь данные о последних # обновлённых и новых темах-- даты, названия, ссылки на индексы /1/1/index.txt (/1/1/index1.txt и т.д.) # индекс первой (самой древней) темы раздела №1: # здесь данные об определённом количестве последних # постов темы (даты, авторы, ссылки), а также, # возможно, ссылка на edit.txt, если хотя бы один из # постов в теме редактировался. /1/1/edit.txt # файл с данными об отредактированных постах (ссылка на пост, # кто редактировал, дата) /1/1/1.txt # первый пост темы №1 раздела №1... можно просто текст Соответственно, если всё архивами-- то тхт каждый в своём архиве. | Цитата: batva: Ну допустим, качнул я с утра апдейт, сижу читаю локально, читаю, читаю, в обед решил ответ написать, пишу, ответ уходит на форум, но с утра утекло много воды, и тема та уже не актуальна, человеку уже ответили он и спасибо уже успел сказать, и мой новый ответ не только не полезен, но и вреден!! Что бум делать? При ответе проверять, и выкидывать мессагу, что типа: "со времени вашего последнего апдейта, в том топике уже новых пять постов, прежде чем отправлять сообщение, убедитесь, что ответ еще актуален"? ironwit: только что проснулась идея. Это все можно реализовать как вебсервер, динамически создавать страничку и подкладывать их броузеру. Вот и все. Ну и при этом отлавливать событие "ответ в топик", перед пересылкой ответа проверять наличие обновлений, скачивать, давать подумать и так до тех пор, пока при отправке сообщения не будет ничего нового в топике. |
Цитата: ironwit: я хотел бы это решить таким образом - на сервере готовятся данные для клиента- даже в виде обычных тесктовых файлов - вида - ник юзера, сообщение. Архивируется, забирается клиентом(висящим в трее ) ... и все форматирование и построение страниц выполняется локально. а можно и просто читать все это хотя бы в том же текстовом редакторе\просмотрщике. ... А теперь Цель программы(как я ее вижу: Иметь возможность оффлайнового просмотра руборда и пересылки ответов сделанных в оффлайне в онлайн (при наличии подключения и отсуствии других постов в этой теме) То есть - чтобы была возможность перед уходом с работы(уходом в оффлайн) скачать текущее состояние требуемых тем и\или разделов в оффлайн, дома (в оффлайне) их просмотреть, подготовить ответы, при выходе в онлайн программа проверяет темы в которых сделаны ответы на наличие новых постов, если они отсутствуют - от отправляем ответ, если посты есть - то они догружаются и дается возмжность отреактировать ответы или отменить. | * Цитаты без указания автора либо ironwit'a, либо мои.
| Всего записей: 4161 | Зарегистр. 25-06-2002 | Отправлено: 04:36 22-11-2003 | Исправлено: Svarga, 04:42 22-11-2003 |
|