Reactor Pattern trong NodeJS
Y t??ng chính c?a m? hình Reactor là m?i thao tác I/O s? có m?t handler ?i kèm. Trong Node.js, handler này ???c bi?u di?n d??i d?ng m?t hàm callback (vi?t t?t là cb).
Handler s? ???c g?i ngay khi m?t s? ki?n ???c t?o ra và ???c Event Loop x? ly. C?u trúc c?a m? hình Reactor ???c minh h?a trong hình bên d??i.
Cách ho?t ??ng c?a m?t ?ng d?ng s? d?ng m? hình Reactor:
1. ?ng d?ng kh?i t?o m?t thao tác I/O m?i b?ng cách g?i yêu c?u ??n Event Demultiplexer. ??ng th?i, ?ng d?ng c?ng ch? ??nh m?t handler, và handler này s? ???c g?i khi thao tác hoàn t?t. Vi?c g?i yêu c?u này là kh?ng ch?n (non-blocking), t?c là nó ngay l?p t?c tr? quy?n ?i?u khi?n l?i cho ?ng d?ng mà kh?ng c?n ch? thao tác hoàn thành.
2. Khi m?t t?p h?p các thao tác I/O hoàn t?t, Event Demultiplexer s? ??y các s? ki?n t??ng ?ng vào Event Queue.
3. Event Loop b?t ??u l?p qua t?ng s? ki?n trong Event Queue.
4. V?i m?i s? ki?n, handler t??ng ?ng s? ???c g?i ?? x? ly.
5. Handler (là m?t ph?n c?a m? ?ng d?ng) s? th?c thi và khi hoàn t?t, nó tr? quy?n ?i?u khi?n l?i cho Event Loop (B??c 5a).
Trong quá trình th?c thi, handler có th? kh?i t?o thêm các thao tác b?t ??ng b? m?i (B??c 5b), d?n ??n vi?c thêm yêu c?u m?i vào Event Demultiplexer (tr? l?i B??c 1).
6. Khi t?t c? các s? ki?n trong Event Queue ?? ???c x? ly, Event Loop s? ti?p t?c ch? (blocking) trên Event Demultiplexer. Khi m?t s? ki?n m?i xu?t hi?n, chu trình s? ti?p t?c.
Hành vi b?t ??ng b? trong m? hình Reactor
Th?ng qua quá trình trên, có th? th?y tính b?t ??ng b? c?a m? hình Reactor nh? sau:
- ?ng d?ng ??ng ky quan tam ??n m?t tài nguyên t?i m?t th?i ?i?m nh?t ??nh mà kh?ng b? ch?n (non-blocking).
- Khi thao tác hoàn t?t, handler s? ???c g?i ?? x? ly k?t qu?.
?? Nh? cách ti?p c?n này, ?ng d?ng có th? x? ly hàng lo?t tác v? I/O hi?u qu? mà kh?ng b? t?c ngh?n do ch? ??i thao tác hoàn t?t.
Senior Software Engineer | Java | Spring Boot | Micro Services | Fullstack Software Developer | Angular | AWS | TechLead
1 个月Very informative! Thanks for sharing!