-
-
Notifications
You must be signed in to change notification settings - Fork 9
modules output
Това ще са модули, които работят с данните, които ще пращаме по сокета за отговор. Целта им е да ги модифицират по някакъв начин. Модулите ще работят с два вида данни - хедъри и тяло. За това си мисля, че може да направим дав интерфейса за тях:
- OutputFilterHeaders
- OutputFilterBody
За имената не съм сигурен.
Тези модули ще държим в една директория и за всеки request ще се прави следното:
-
Преди да се пратят хедърите, ще се дадът за редакция на по веднъж на всеки от модулите, които имплементират интерфейса за хедъри.
-
Всички байтове, които се пращат към сокета ще преминават през всеки от модулите, които имплементират интерфейса за тяло. Така всеки модул ще е свободен да прави каквото иска с него - да го буферира и да си търси него, да го модифицира и дори да го заменя напълно.
Примери за такива модули са gzip
, всички модули, които се грижат за HTTP стандарта като пращат правилните хедъри, mp4 и flv пренаписвачки на данните спрямо някакъв псевдостандарт като ?start=
.
Очевидно, реда на изпълнение на тези модули ще е важен в някои случаи. За целта предлагам в директорията на модулите да има един файл order.txt
, в който да се държат имената на модулите и той да задава тяхния ред. Ако на някой модул му е много важно да се изпълнява преди/след друг това ще може да бъде постигнато чрез този файл. В него трябва да има и един ред, който да казва "неподредени", на мястото на който ще се приме, че са всички модули, които не са изрично подредени. Пример:
mp4_start
flv_start
--unordered
gzip
Единственото, което ми хрумва е този файл да се подържа ръчно. Ще се прочита веднъж при пускане на сървъра за да се зареди реда. Или при пускане на go generate
от този файл ще се създава кода, който пуска модулите в правилния ред.
Друг вариант е този ред да се записва в конфигурацията на сървъра, да кажем в нова секция в config.json.
Третия вариант е конвенция на имената папките на модулите. По подобно на GNU конфигурациите те може да започват с числа: 001-mp4, 002-flv, 003-gzip
. Само не ми е ясно как ща кажем къде са неподредените модули.