diff options
Diffstat (limited to 'docs/design/008-module-format.md')
| -rw-r--r-- | docs/design/008-module-format.md | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/docs/design/008-module-format.md b/docs/design/008-module-format.md index 63d260a..da9abd9 100644 --- a/docs/design/008-module-format.md +++ b/docs/design/008-module-format.md @@ -494,6 +494,15 @@ text·리스트가 남을 때만 위치를 유지한다. 아직 모듈 앱을 런타임 코어의 효과 단위로 세분하지는 않았다(`runtime.c`의 `definition`은 앱 전체다). 호스트가 직접 호출한다. +**보기를 미는 길**([019](019-pushing-views.md)). 보기의 `GET`에 `Accept: text/event-stream`이면 그 연결은 구독자가 된다: 답의 +머리(`200`, `text/event-stream`)와 `retry: 1000`을 보내고, 요청을 읽던 연결 기록(약 6 KB)은 돌려주고 소켓과 구독(앱, 보기, 인자)만 +남는다. 같은 연결 스레드에서 같은 보기와 인자를 구독한 것들은 무리 하나다. 소유자가 스냅숏을 공개하면(구독자가 있을 때) 연결 스레드를 +깨우고, 스레드는 `--push-every-ms`(기본 10 ms)마다 많아야 한 번 무리마다 새 스냅숏을 한 번 계산해 값이 앞의 것과 다르면 `id: 스냅숏의 +바뀜 번호`와 `data:` 줄(값의 줄마다)을 무리의 구독자에게 보낸다. 값이 없으면 `event: none`과 그 까닭이다. 보내던 이벤트를 다 보내지 +못한 구독자에게는 새 값 하나만 기다리게 한다(그전 것은 바꾼다). 앱의 모듈이 바뀌면 같은 이름, 같은 종류의 보기로 이어 가고, 없으면 +끊는다. 앱이 멈추거나 토큰 파일이 그 구독의 토큰을 더 허락하지 않으면 끊는다. `--subscribers`(기본 65,536)가 스레드의 구독자 수를 +묶는다(넘으면 503 `busy`). + ## 실행기 크기 실행기는 `-O2` text로 49.8 KB였다가 42.2 KB가 됐다. `module.c`가 34.0 → 27.0 KB, `module-list.c` 5.6 KB, |
