Кэш воспроизведения AFP
Если сервер поддерживает кэш воспроизведения, то в DSIOpenSession ответный пакет от сервера, существует новый тип опции kServerReplayCacheSize. Длина поля Опции составляет 4 байта, и значение Опции является максимальным количеством запросов DSI, что сервер AFP может кэшироваться в его кэше воспроизведения. Клиент выбирает меньший из его собственного максимального размера или максимального размера сервера.
На серверной стороне кэш воспроизведения является тем же размером как кэш воспроизведения клиента, таким образом, можно освободить самый старый запрос DSI при получении запроса с ID size+1.
Например, если клиент отправляет 5 запросов с запросом DSI IDs 1, 2, 3, 4, и 5, ответы кэшей Сервера AFP для запросов 1, 2, 3, 4, и 5, если кэш воспроизведения клиента и сервера поддерживает 5 запросов DSI. Когда следующий запрос DSI отправлен клиентом AFP, он имеет Запрос DSI ID 6. На сервере AFP, когда запрос с ID 6 поступает, сервер знает, что ответ для ID 1 запроса DSI был успешно получен клиентом AFP. Таким образом ответ для запроса с ID 1 может теперь быть освобожден. Когда запрос с ID 7 получен сервером AFP, это освобождает ответ для запроса с ID 2. Клиент никогда не будет отправлять больше запросов, чем максимальное количество запросов в кэше воспроизведения.
Рекомендуется, чтобы кэш воспроизведения был достаточно большим для содержания по крайней мере 32 запросов, но строго меньше чем 65 536.
Если сервер включает a kServerReplayCacheSize опция в части данных DSIOpenSession ответный пакет, тогда предполагается, что сервер поддерживает кэш воспроизведения. Если кэш воспроизведения поддерживается сервером, клиент не сбрасывает поле Request ID для обнуления в заголовке DSI на переподключении. Этот персистентный ID запроса позволяет серверу обнаруживать, является ли запрос воспроизводимым запросом или новым запросом от клиента.
Сервер AFP сохраняет кэш воспроизведения, содержащий ответы, которые он отправил. Когда запрос поступает от клиента, сервер ищет этот кэш, ища соответствие, DSI запрашивают ID. Если соответствующий ID найден, сервер сравнивает байт команды AFP с исходным запросом, чтобы удостовериться, что они соответствуют. Если соответствие байта команды ID и AFP запроса DSI, Сервер AFP отправляет ответ от кэша воспроизведения. Если соответствие не найдено в кэше, то Сервер AFP должен обработать его как новый запрос от клиента.
С воспроизведением клиент AFP DS запрашивает, чтобы IDs был персистентным, что означает, что они не должны быть снова использованы, если запрос не является воспроизведением предыдущего запроса (подразумевать, что клиент никогда не получал исходный ответ, таким образом, это воспроизводит запрос после успешного основного переподключения), или ID повторился назад к тому же самому числу.
Все команды AFP могут кэшироваться в кэше Воспроизведения, если Вы хотите, но только подмножество команд AFP является неидемпотентом и должно кэшироваться. Эти команды:
FPByteRangeLock
FPByteRangeLockExt
FPChangePassword
FPCloseFork
FPCloseVol
FPCopyFile
FPCreateDir
FPCreateFile
FPDelete
FPExchangeFiles
FPFlush
FPFlushFork
FPRemoveExtendedAttr
FPMoveAndRename
FPOpenFork
FPOpenVol
FPRename
FPSetDirParms
FPSetFileDirParms
FPSetFileParms
FPSetForkParms
FPSetVolParms
FPSetExtendedAttr
FPSetACL
FPLink
FPSyncDir
FPSyncFork
Кэш воспроизведения полезен, только если Основное Переподключение успешно. Если основное переподключение перестало работать, то кэш воспроизведения не был найден, и воспроизведение не возможно. В этом случае любые незаконченные запросы на клиенте в его кэше воспроизведения отбрасываются и снова посылаются как новые запросы.
Когда клиент AFP разъединяется, это приостанавливает любые все еще выдающиеся запросы. После успешного основного переподключения это воспроизводит те запросы точно, поскольку они были отосланы прежде.
Заголовки DSI для AFP/TCP описаны в AFP По TCP.