![]() |
|
#1
|
||||
|
||||
![]() Хочу спросить насчет реализации следующего
Неизвестное число пользователей, отсылают запросы и им отправляются страницы книг которые они читают. Но как быть, постоянно грузить книгу при каждом запросе и копировать нужный текст. Или же если оставлять в TstringList то нам не известно сколько пользователей будет читать для каждого надо будет свой TstringList. Да и к тому же если оба одну книгу запросят надо както знать из какой переменной её взять, в общем получается куча гемороя, и кроме как через массивы вариантов не вижу, с вариантом постоянной загрузки проще, но медленней, война и мир к примеру в файле txt 3мб весит, и так каждый раз грузить. Хотел бы услышать советы. |
#2
|
|||
|
|||
![]() Организуй фабрику (есть прямо такой паттерн).
Когда у тебя приходит запрос страницы из книги, то ты обращаешься к фабрике, а уже она проверяет, есть ли в памяти такая книга и, если нет, то подгружает. Ну в номер страницы хранится в переменных сессии клиента. Т.е. данные буду в одном экземпляре. |
#3
|
||||
|
||||
![]() хм, ну это логично, а грузить куда? в массив TStringList? потом когда книгу прекратили читать нодо еще и очищать, а гдето вести запись какие массивы свободны
|
#4
|
|||
|
|||
![]() Цитата:
Грузить - в зависимости от формата. Надо смотреть по обстоятельствам. По поводу очистки. Ну я бы подумал на счет ограничения по времени и кол-ву запросов. Например если к конкретной книге не обращаются в течении 10 минут и 100 запросов, то книгу выгружаем. Можно еще грузить не всю книгу, а некоторый набор странриц под конкретного пользователя. Но тут уже зависит от формата, а котором хранится книга. Иной раз дешевле загрузить все. |
#5
|
||||
|
||||
![]() все абсолютно txt будет, насчет очистки у меня проблем нету, я больше клоню к тому что с массивами много гемороя
|
#6
|
||||
|
||||
![]() Это с каких пор массивы стали проблемными?
Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
#7
|
||||
|
||||
![]() ну например изначалльно нужно както помечать занятые места в массиве, как только появляется клиент нужно найти ему свободныое место и загрузить книгу, потом освободить и пометить как не занятый, чтобы в последствии при надобности выделить другому, так же записывать в каком какая книга.
|
#8
|
||||
|
||||
![]() И в чём проблема?
Код:
type TMyRec = record Busy : Boolean; Buf : ; // нужный тип end; var MyRec : array of TMyRec; Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
#9
|
||||
|
||||
![]() А при поиске свободного пробегаться циклом?
|
#10
|
||||
|
||||
![]() Много время не займёт.
И это только набросок, поля можно организовать и по-другому, также ничто не мешает использовать структуру в связке с TList, тогда все прелести как Delete, Pack, IndexOf и т.д. станут доступны. Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
#11
|
|||
|
|||
![]() или можно на ассоциативный массив книг
http://ru.wikipedia.org/wiki/Ассоциа..._массив#Delphi а если надо хранить число пользователей то: AddObject(TMy.create) Objects['voina i mir'].plusodin type Tmy = class private colvo: integer; public plusodin; minusodin; как-то так |