File tree Expand file tree Collapse file tree 3 files changed +84
-0
lines changed Expand file tree Collapse file tree 3 files changed +84
-0
lines changed Original file line number Diff line number Diff line change
1
+ const cluster = require ( 'cluster' ) ;
2
+ if ( cluster . isMaster ) {
3
+ // Mediate between master class and forks
4
+ class MasterProcessMediator {
5
+ constructor ( ) {
6
+ this . forks = [ ] ;
7
+ }
8
+ init ( ) {
9
+ const worker = cluster . fork ( ) ;
10
+ this . forks . push ( worker ) ;
11
+ //
12
+ worker . on ( 'message' ,
13
+ ( ( ) => ( message ) => this . handleMessageFromWorker ( worker . id , message ) ) ( )
14
+ ) ;
15
+ }
16
+
17
+ // handler for various workers
18
+ handleMessageFromWorker ( workerId , message ) {
19
+ console . log ( "Worker " + workerId + " says hi with msg " + message ) ;
20
+ }
21
+
22
+ notifyAllWorker ( ) {
23
+ this . forks . map ( fork => fork . send ( "received Msg" ) ) ;
24
+ }
25
+ }
26
+
27
+ const mediator = new MasterProcessMediator ( ) ;
28
+ mediator . init ( ) ;
29
+
30
+ mediator . notifyAllWorker ( ) ;
31
+ } else {
32
+ process . on ( 'message' , ( message ) => {
33
+ console . log ( cluster . worker . id + " " + message ) ;
34
+ } ) ;
35
+ process . send ( "working" ) ;
36
+ setTimeout ( ( ) => process . kill ( process . pid ) , 0 ) ;
37
+ }
38
+
Original file line number Diff line number Diff line change @@ -33,6 +33,7 @@ const sections = [
33
33
{ name : 'chainOfResponsibility' , path : './Behavioral' } ,
34
34
{ name : 'command' , path : './Behavioral' } ,
35
35
{ name : 'iterator' , path : './Behavioral' } ,
36
+ { name : 'mediator' , path : './Behavioral' } ,
36
37
]
37
38
}
38
39
] ;
Original file line number Diff line number Diff line change 20
20
* [ Chain Of Responsibility] ( #chain-of-responsibility )
21
21
* [ Command] ( #command )
22
22
* [ Iterator] ( #iterator )
23
+ * [ Mediator] ( #mediator )
23
24
24
25
25
26
@@ -780,5 +781,49 @@ function totalSize(iterator) {
780
781
console .log (totalSize (new FileBufferIterator (__dirname )));
781
782
```
782
783
784
+ ### Mediator
785
+ ##### mediator.js
786
+ ``` Javascript
787
+ const cluster = require (' cluster' );
788
+ if (cluster .isMaster ) {
789
+ // Mediate between master class and forks
790
+ class MasterProcessMediator {
791
+ constructor () {
792
+ this .forks = [];
793
+ }
794
+ init () {
795
+ const worker = cluster .fork ();
796
+ this .forks .push (worker);
797
+ //
798
+ worker .on (' message' ,
799
+ (() => (message ) => this .handleMessageFromWorker (worker .id , message))()
800
+ );
801
+ }
802
+
803
+ // handler for various workers
804
+ handleMessageFromWorker (workerId , message ) {
805
+ console .log (" Worker " + workerId + " says hi with msg " + message);
806
+ }
807
+
808
+ notifyAllWorker () {
809
+ this .forks .map (fork => fork .send (" received Msg" ));
810
+ }
811
+ }
812
+
813
+ const mediator = new MasterProcessMediator ();
814
+ mediator .init ();
815
+
816
+ mediator .notifyAllWorker ();
817
+ } else {
818
+ process .on (' message' , (message ) => {
819
+ console .log (cluster .worker .id + " " + message);
820
+ });
821
+ process .send (" working" );
822
+ setTimeout (() => process .kill (process .pid ), 0 );
823
+ }
824
+
825
+
826
+ ```
827
+
783
828
784
829
You can’t perform that action at this time.
0 commit comments