m06_task3.js 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (204) hide show
  1. package/.idea/.name +1 -0
  2. package/.idea/inspectionProfiles/Project_Default.xml +10 -0
  3. package/.idea/jsLibraryMappings.xml +6 -0
  4. package/.idea/modules.xml +8 -0
  5. package/.idea/node_lab_6.iml +12 -0
  6. package/06_task2.html +73 -0
  7. package/06_task2.js +52 -0
  8. package/06_task3.js +3 -0
  9. package/06_task4.js +3 -0
  10. package/m06_task3.js +28 -0
  11. package/package/index.js +28 -0
  12. package/package/node_modules/.package-lock.json +31 -0
  13. package/package/node_modules/@types/node/LICENSE +21 -0
  14. package/package/node_modules/@types/node/README.md +16 -0
  15. package/package/node_modules/@types/node/assert/strict.d.ts +8 -0
  16. package/package/node_modules/@types/node/assert.d.ts +961 -0
  17. package/package/node_modules/@types/node/async_hooks.d.ts +501 -0
  18. package/package/node_modules/@types/node/buffer.d.ts +2258 -0
  19. package/package/node_modules/@types/node/child_process.d.ts +1369 -0
  20. package/package/node_modules/@types/node/cluster.d.ts +410 -0
  21. package/package/node_modules/@types/node/console.d.ts +412 -0
  22. package/package/node_modules/@types/node/constants.d.ts +18 -0
  23. package/package/node_modules/@types/node/crypto.d.ts +3964 -0
  24. package/package/node_modules/@types/node/dgram.d.ts +545 -0
  25. package/package/node_modules/@types/node/diagnostics_channel.d.ts +153 -0
  26. package/package/node_modules/@types/node/dns/promises.d.ts +370 -0
  27. package/package/node_modules/@types/node/dns.d.ts +659 -0
  28. package/package/node_modules/@types/node/dom-events.d.ts +126 -0
  29. package/package/node_modules/@types/node/domain.d.ts +170 -0
  30. package/package/node_modules/@types/node/events.d.ts +678 -0
  31. package/package/node_modules/@types/node/fs/promises.d.ts +1138 -0
  32. package/package/node_modules/@types/node/fs.d.ts +3872 -0
  33. package/package/node_modules/@types/node/globals.d.ts +300 -0
  34. package/package/node_modules/@types/node/globals.global.d.ts +1 -0
  35. package/package/node_modules/@types/node/http.d.ts +1614 -0
  36. package/package/node_modules/@types/node/http2.d.ts +2134 -0
  37. package/package/node_modules/@types/node/https.d.ts +541 -0
  38. package/package/node_modules/@types/node/index.d.ts +133 -0
  39. package/package/node_modules/@types/node/inspector.d.ts +2741 -0
  40. package/package/node_modules/@types/node/module.d.ts +114 -0
  41. package/package/node_modules/@types/node/net.d.ts +869 -0
  42. package/package/node_modules/@types/node/os.d.ts +466 -0
  43. package/package/node_modules/@types/node/package.json +232 -0
  44. package/package/node_modules/@types/node/path.d.ts +191 -0
  45. package/package/node_modules/@types/node/perf_hooks.d.ts +625 -0
  46. package/package/node_modules/@types/node/process.d.ts +1482 -0
  47. package/package/node_modules/@types/node/punycode.d.ts +117 -0
  48. package/package/node_modules/@types/node/querystring.d.ts +131 -0
  49. package/package/node_modules/@types/node/readline/promises.d.ts +143 -0
  50. package/package/node_modules/@types/node/readline.d.ts +653 -0
  51. package/package/node_modules/@types/node/repl.d.ts +424 -0
  52. package/package/node_modules/@types/node/stream/consumers.d.ts +12 -0
  53. package/package/node_modules/@types/node/stream/promises.d.ts +42 -0
  54. package/package/node_modules/@types/node/stream/web.d.ts +330 -0
  55. package/package/node_modules/@types/node/stream.d.ts +1340 -0
  56. package/package/node_modules/@types/node/string_decoder.d.ts +67 -0
  57. package/package/node_modules/@types/node/test.d.ts +314 -0
  58. package/package/node_modules/@types/node/timers/promises.d.ts +68 -0
  59. package/package/node_modules/@types/node/timers.d.ts +94 -0
  60. package/package/node_modules/@types/node/tls.d.ts +1028 -0
  61. package/package/node_modules/@types/node/trace_events.d.ts +171 -0
  62. package/package/node_modules/@types/node/ts4.8/assert/strict.d.ts +8 -0
  63. package/package/node_modules/@types/node/ts4.8/assert.d.ts +961 -0
  64. package/package/node_modules/@types/node/ts4.8/async_hooks.d.ts +501 -0
  65. package/package/node_modules/@types/node/ts4.8/buffer.d.ts +2259 -0
  66. package/package/node_modules/@types/node/ts4.8/child_process.d.ts +1369 -0
  67. package/package/node_modules/@types/node/ts4.8/cluster.d.ts +410 -0
  68. package/package/node_modules/@types/node/ts4.8/console.d.ts +412 -0
  69. package/package/node_modules/@types/node/ts4.8/constants.d.ts +18 -0
  70. package/package/node_modules/@types/node/ts4.8/crypto.d.ts +3964 -0
  71. package/package/node_modules/@types/node/ts4.8/dgram.d.ts +545 -0
  72. package/package/node_modules/@types/node/ts4.8/diagnostics_channel.d.ts +153 -0
  73. package/package/node_modules/@types/node/ts4.8/dns/promises.d.ts +370 -0
  74. package/package/node_modules/@types/node/ts4.8/dns.d.ts +659 -0
  75. package/package/node_modules/@types/node/ts4.8/dom-events.d.ts +126 -0
  76. package/package/node_modules/@types/node/ts4.8/domain.d.ts +170 -0
  77. package/package/node_modules/@types/node/ts4.8/events.d.ts +678 -0
  78. package/package/node_modules/@types/node/ts4.8/fs/promises.d.ts +1138 -0
  79. package/package/node_modules/@types/node/ts4.8/fs.d.ts +3872 -0
  80. package/package/node_modules/@types/node/ts4.8/globals.d.ts +294 -0
  81. package/package/node_modules/@types/node/ts4.8/globals.global.d.ts +1 -0
  82. package/package/node_modules/@types/node/ts4.8/http.d.ts +1614 -0
  83. package/package/node_modules/@types/node/ts4.8/http2.d.ts +2134 -0
  84. package/package/node_modules/@types/node/ts4.8/https.d.ts +541 -0
  85. package/package/node_modules/@types/node/ts4.8/index.d.ts +88 -0
  86. package/package/node_modules/@types/node/ts4.8/inspector.d.ts +2741 -0
  87. package/package/node_modules/@types/node/ts4.8/module.d.ts +114 -0
  88. package/package/node_modules/@types/node/ts4.8/net.d.ts +869 -0
  89. package/package/node_modules/@types/node/ts4.8/os.d.ts +466 -0
  90. package/package/node_modules/@types/node/ts4.8/path.d.ts +191 -0
  91. package/package/node_modules/@types/node/ts4.8/perf_hooks.d.ts +625 -0
  92. package/package/node_modules/@types/node/ts4.8/process.d.ts +1482 -0
  93. package/package/node_modules/@types/node/ts4.8/punycode.d.ts +117 -0
  94. package/package/node_modules/@types/node/ts4.8/querystring.d.ts +131 -0
  95. package/package/node_modules/@types/node/ts4.8/readline/promises.d.ts +143 -0
  96. package/package/node_modules/@types/node/ts4.8/readline.d.ts +653 -0
  97. package/package/node_modules/@types/node/ts4.8/repl.d.ts +424 -0
  98. package/package/node_modules/@types/node/ts4.8/stream/consumers.d.ts +12 -0
  99. package/package/node_modules/@types/node/ts4.8/stream/promises.d.ts +42 -0
  100. package/package/node_modules/@types/node/ts4.8/stream/web.d.ts +330 -0
  101. package/package/node_modules/@types/node/ts4.8/stream.d.ts +1340 -0
  102. package/package/node_modules/@types/node/ts4.8/string_decoder.d.ts +67 -0
  103. package/package/node_modules/@types/node/ts4.8/test.d.ts +314 -0
  104. package/package/node_modules/@types/node/ts4.8/timers/promises.d.ts +68 -0
  105. package/package/node_modules/@types/node/ts4.8/timers.d.ts +94 -0
  106. package/package/node_modules/@types/node/ts4.8/tls.d.ts +1028 -0
  107. package/package/node_modules/@types/node/ts4.8/trace_events.d.ts +171 -0
  108. package/package/node_modules/@types/node/ts4.8/tty.d.ts +206 -0
  109. package/package/node_modules/@types/node/ts4.8/url.d.ts +897 -0
  110. package/package/node_modules/@types/node/ts4.8/util.d.ts +1850 -0
  111. package/package/node_modules/@types/node/ts4.8/v8.d.ts +396 -0
  112. package/package/node_modules/@types/node/ts4.8/vm.d.ts +509 -0
  113. package/package/node_modules/@types/node/ts4.8/wasi.d.ts +158 -0
  114. package/package/node_modules/@types/node/ts4.8/worker_threads.d.ts +689 -0
  115. package/package/node_modules/@types/node/ts4.8/zlib.d.ts +517 -0
  116. package/package/node_modules/@types/node/tty.d.ts +206 -0
  117. package/package/node_modules/@types/node/url.d.ts +897 -0
  118. package/package/node_modules/@types/node/util.d.ts +1850 -0
  119. package/package/node_modules/@types/node/v8.d.ts +396 -0
  120. package/package/node_modules/@types/node/vm.d.ts +509 -0
  121. package/package/node_modules/@types/node/wasi.d.ts +158 -0
  122. package/package/node_modules/@types/node/worker_threads.d.ts +689 -0
  123. package/package/node_modules/@types/node/zlib.d.ts +517 -0
  124. package/package/node_modules/@types/nodemailer/LICENSE +21 -0
  125. package/package/node_modules/@types/nodemailer/README.md +16 -0
  126. package/package/node_modules/@types/nodemailer/index.d.ts +83 -0
  127. package/package/node_modules/@types/nodemailer/lib/addressparser/index.d.ts +31 -0
  128. package/package/node_modules/@types/nodemailer/lib/base64/index.d.ts +22 -0
  129. package/package/node_modules/@types/nodemailer/lib/dkim/index.d.ts +45 -0
  130. package/package/node_modules/@types/nodemailer/lib/dkim/message-parser.d.ts +75 -0
  131. package/package/node_modules/@types/nodemailer/lib/dkim/relaxed-body.d.ts +75 -0
  132. package/package/node_modules/@types/nodemailer/lib/dkim/sign.d.ts +11 -0
  133. package/package/node_modules/@types/nodemailer/lib/fetch/cookies.d.ts +54 -0
  134. package/package/node_modules/@types/nodemailer/lib/fetch/index.d.ts +38 -0
  135. package/package/node_modules/@types/nodemailer/lib/json-transport/index.d.ts +50 -0
  136. package/package/node_modules/@types/nodemailer/lib/mail-composer/index.d.ts +25 -0
  137. package/package/node_modules/@types/nodemailer/lib/mailer/index.d.ts +230 -0
  138. package/package/node_modules/@types/nodemailer/lib/mailer/mail-message.d.ts +28 -0
  139. package/package/node_modules/@types/nodemailer/lib/mime-funcs/index.d.ts +87 -0
  140. package/package/node_modules/@types/nodemailer/lib/mime-funcs/mime-types.d.ts +2 -0
  141. package/package/node_modules/@types/nodemailer/lib/mime-node/index.d.ts +137 -0
  142. package/package/node_modules/@types/nodemailer/lib/mime-node/last-newline.d.ts +9 -0
  143. package/package/node_modules/@types/nodemailer/lib/qp/index.d.ts +23 -0
  144. package/package/node_modules/@types/nodemailer/lib/sendmail-transport/index.d.ts +53 -0
  145. package/package/node_modules/@types/nodemailer/lib/sendmail-transport/le-unix.d.ts +7 -0
  146. package/package/node_modules/@types/nodemailer/lib/sendmail-transport/le-windows.d.ts +7 -0
  147. package/package/node_modules/@types/nodemailer/lib/ses-transport/index.d.ts +136 -0
  148. package/package/node_modules/@types/nodemailer/lib/shared/index.d.ts +51 -0
  149. package/package/node_modules/@types/nodemailer/lib/smtp-connection/data-stream.d.ts +11 -0
  150. package/package/node_modules/@types/nodemailer/lib/smtp-connection/http-proxy-client.d.ts +11 -0
  151. package/package/node_modules/@types/nodemailer/lib/smtp-connection/index.d.ts +254 -0
  152. package/package/node_modules/@types/nodemailer/lib/smtp-pool/index.d.ts +90 -0
  153. package/package/node_modules/@types/nodemailer/lib/smtp-pool/pool-resource.d.ts +66 -0
  154. package/package/node_modules/@types/nodemailer/lib/smtp-transport/index.d.ts +115 -0
  155. package/package/node_modules/@types/nodemailer/lib/stream-transport/index.d.ts +56 -0
  156. package/package/node_modules/@types/nodemailer/lib/well-known/index.d.ts +6 -0
  157. package/package/node_modules/@types/nodemailer/lib/xoauth2/index.d.ts +110 -0
  158. package/package/node_modules/@types/nodemailer/package.json +37 -0
  159. package/package/node_modules/nodemailer/.gitattributes +6 -0
  160. package/package/node_modules/nodemailer/.prettierrc.js +8 -0
  161. package/package/node_modules/nodemailer/CHANGELOG.md +715 -0
  162. package/package/node_modules/nodemailer/CODE_OF_CONDUCT.md +76 -0
  163. package/package/node_modules/nodemailer/CONTRIBUTING.md +67 -0
  164. package/package/node_modules/nodemailer/LICENSE +16 -0
  165. package/package/node_modules/nodemailer/README.md +93 -0
  166. package/package/node_modules/nodemailer/SECURITY.txt +22 -0
  167. package/package/node_modules/nodemailer/lib/addressparser/index.js +313 -0
  168. package/package/node_modules/nodemailer/lib/base64/index.js +142 -0
  169. package/package/node_modules/nodemailer/lib/dkim/index.js +251 -0
  170. package/package/node_modules/nodemailer/lib/dkim/message-parser.js +155 -0
  171. package/package/node_modules/nodemailer/lib/dkim/relaxed-body.js +154 -0
  172. package/package/node_modules/nodemailer/lib/dkim/sign.js +117 -0
  173. package/package/node_modules/nodemailer/lib/fetch/cookies.js +281 -0
  174. package/package/node_modules/nodemailer/lib/fetch/index.js +269 -0
  175. package/package/node_modules/nodemailer/lib/json-transport/index.js +82 -0
  176. package/package/node_modules/nodemailer/lib/mail-composer/index.js +558 -0
  177. package/package/node_modules/nodemailer/lib/mailer/index.js +427 -0
  178. package/package/node_modules/nodemailer/lib/mailer/mail-message.js +315 -0
  179. package/package/node_modules/nodemailer/lib/mime-funcs/index.js +619 -0
  180. package/package/node_modules/nodemailer/lib/mime-funcs/mime-types.js +2102 -0
  181. package/package/node_modules/nodemailer/lib/mime-node/index.js +1290 -0
  182. package/package/node_modules/nodemailer/lib/mime-node/last-newline.js +33 -0
  183. package/package/node_modules/nodemailer/lib/mime-node/le-unix.js +43 -0
  184. package/package/node_modules/nodemailer/lib/mime-node/le-windows.js +52 -0
  185. package/package/node_modules/nodemailer/lib/nodemailer.js +143 -0
  186. package/package/node_modules/nodemailer/lib/qp/index.js +219 -0
  187. package/package/node_modules/nodemailer/lib/sendmail-transport/index.js +210 -0
  188. package/package/node_modules/nodemailer/lib/ses-transport/index.js +349 -0
  189. package/package/node_modules/nodemailer/lib/shared/index.js +639 -0
  190. package/package/node_modules/nodemailer/lib/smtp-connection/data-stream.js +108 -0
  191. package/package/node_modules/nodemailer/lib/smtp-connection/http-proxy-client.js +143 -0
  192. package/package/node_modules/nodemailer/lib/smtp-connection/index.js +1786 -0
  193. package/package/node_modules/nodemailer/lib/smtp-pool/index.js +648 -0
  194. package/package/node_modules/nodemailer/lib/smtp-pool/pool-resource.js +253 -0
  195. package/package/node_modules/nodemailer/lib/smtp-transport/index.js +416 -0
  196. package/package/node_modules/nodemailer/lib/stream-transport/index.js +135 -0
  197. package/package/node_modules/nodemailer/lib/well-known/index.js +47 -0
  198. package/package/node_modules/nodemailer/lib/well-known/services.json +286 -0
  199. package/package/node_modules/nodemailer/lib/xoauth2/index.js +376 -0
  200. package/package/node_modules/nodemailer/package.json +46 -0
  201. package/package/node_modules/nodemailer/postinstall.js +101 -0
  202. package/package/package-lock.json +60 -0
  203. package/package/package.json +6 -0
  204. package/package.json +19 -0
@@ -0,0 +1,410 @@
1
+ /**
2
+ * Clusters of Node.js processes can be used to run multiple instances of Node.js
3
+ * that can distribute workloads among their application threads. When process
4
+ * isolation is not needed, use the `worker_threads` module instead, which
5
+ * allows running multiple application threads within a single Node.js instance.
6
+ *
7
+ * The cluster module allows easy creation of child processes that all share
8
+ * server ports.
9
+ *
10
+ * ```js
11
+ * import cluster from 'cluster';
12
+ * import http from 'http';
13
+ * import { cpus } from 'os';
14
+ * import process from 'process';
15
+ *
16
+ * const numCPUs = cpus().length;
17
+ *
18
+ * if (cluster.isPrimary) {
19
+ * console.log(`Primary ${process.pid} is running`);
20
+ *
21
+ * // Fork workers.
22
+ * for (let i = 0; i < numCPUs; i++) {
23
+ * cluster.fork();
24
+ * }
25
+ *
26
+ * cluster.on('exit', (worker, code, signal) => {
27
+ * console.log(`worker ${worker.process.pid} died`);
28
+ * });
29
+ * } else {
30
+ * // Workers can share any TCP connection
31
+ * // In this case it is an HTTP server
32
+ * http.createServer((req, res) => {
33
+ * res.writeHead(200);
34
+ * res.end('hello world\n');
35
+ * }).listen(8000);
36
+ *
37
+ * console.log(`Worker ${process.pid} started`);
38
+ * }
39
+ * ```
40
+ *
41
+ * Running Node.js will now share port 8000 between the workers:
42
+ *
43
+ * ```console
44
+ * $ node server.js
45
+ * Primary 3596 is running
46
+ * Worker 4324 started
47
+ * Worker 4520 started
48
+ * Worker 6056 started
49
+ * Worker 5644 started
50
+ * ```
51
+ *
52
+ * On Windows, it is not yet possible to set up a named pipe server in a worker.
53
+ * @see [source](https://github.com/nodejs/node/blob/v18.0.0/lib/cluster.js)
54
+ */
55
+ declare module 'cluster' {
56
+ import * as child from 'node:child_process';
57
+ import EventEmitter = require('node:events');
58
+ import * as net from 'node:net';
59
+ export interface ClusterSettings {
60
+ execArgv?: string[] | undefined; // default: process.execArgv
61
+ exec?: string | undefined;
62
+ args?: string[] | undefined;
63
+ silent?: boolean | undefined;
64
+ stdio?: any[] | undefined;
65
+ uid?: number | undefined;
66
+ gid?: number | undefined;
67
+ inspectPort?: number | (() => number) | undefined;
68
+ }
69
+ export interface Address {
70
+ address: string;
71
+ port: number;
72
+ addressType: number | 'udp4' | 'udp6'; // 4, 6, -1, "udp4", "udp6"
73
+ }
74
+ /**
75
+ * A `Worker` object contains all public information and method about a worker.
76
+ * In the primary it can be obtained using `cluster.workers`. In a worker
77
+ * it can be obtained using `cluster.worker`.
78
+ * @since v0.7.0
79
+ */
80
+ export class Worker extends EventEmitter {
81
+ /**
82
+ * Each new worker is given its own unique id, this id is stored in the`id`.
83
+ *
84
+ * While a worker is alive, this is the key that indexes it in`cluster.workers`.
85
+ * @since v0.8.0
86
+ */
87
+ id: number;
88
+ /**
89
+ * All workers are created using `child_process.fork()`, the returned object
90
+ * from this function is stored as `.process`. In a worker, the global `process`is stored.
91
+ *
92
+ * See: `Child Process module`.
93
+ *
94
+ * Workers will call `process.exit(0)` if the `'disconnect'` event occurs
95
+ * on `process` and `.exitedAfterDisconnect` is not `true`. This protects against
96
+ * accidental disconnection.
97
+ * @since v0.7.0
98
+ */
99
+ process: child.ChildProcess;
100
+ /**
101
+ * Send a message to a worker or primary, optionally with a handle.
102
+ *
103
+ * In the primary, this sends a message to a specific worker. It is identical to `ChildProcess.send()`.
104
+ *
105
+ * In a worker, this sends a message to the primary. It is identical to`process.send()`.
106
+ *
107
+ * This example will echo back all messages from the primary:
108
+ *
109
+ * ```js
110
+ * if (cluster.isPrimary) {
111
+ * const worker = cluster.fork();
112
+ * worker.send('hi there');
113
+ *
114
+ * } else if (cluster.isWorker) {
115
+ * process.on('message', (msg) => {
116
+ * process.send(msg);
117
+ * });
118
+ * }
119
+ * ```
120
+ * @since v0.7.0
121
+ * @param options The `options` argument, if present, is an object used to parameterize the sending of certain types of handles. `options` supports the following properties:
122
+ */
123
+ send(message: child.Serializable, callback?: (error: Error | null) => void): boolean;
124
+ send(message: child.Serializable, sendHandle: child.SendHandle, callback?: (error: Error | null) => void): boolean;
125
+ send(message: child.Serializable, sendHandle: child.SendHandle, options?: child.MessageOptions, callback?: (error: Error | null) => void): boolean;
126
+ /**
127
+ * This function will kill the worker. In the primary worker, it does this by
128
+ * disconnecting the `worker.process`, and once disconnected, killing with`signal`. In the worker, it does it by killing the process with `signal`.
129
+ *
130
+ * The `kill()` function kills the worker process without waiting for a graceful
131
+ * disconnect, it has the same behavior as `worker.process.kill()`.
132
+ *
133
+ * This method is aliased as `worker.destroy()` for backwards compatibility.
134
+ *
135
+ * In a worker, `process.kill()` exists, but it is not this function;
136
+ * it is `kill()`.
137
+ * @since v0.9.12
138
+ * @param [signal='SIGTERM'] Name of the kill signal to send to the worker process.
139
+ */
140
+ kill(signal?: string): void;
141
+ destroy(signal?: string): void;
142
+ /**
143
+ * In a worker, this function will close all servers, wait for the `'close'` event
144
+ * on those servers, and then disconnect the IPC channel.
145
+ *
146
+ * In the primary, an internal message is sent to the worker causing it to call`.disconnect()` on itself.
147
+ *
148
+ * Causes `.exitedAfterDisconnect` to be set.
149
+ *
150
+ * After a server is closed, it will no longer accept new connections,
151
+ * but connections may be accepted by any other listening worker. Existing
152
+ * connections will be allowed to close as usual. When no more connections exist,
153
+ * see `server.close()`, the IPC channel to the worker will close allowing it
154
+ * to die gracefully.
155
+ *
156
+ * The above applies _only_ to server connections, client connections are not
157
+ * automatically closed by workers, and disconnect does not wait for them to close
158
+ * before exiting.
159
+ *
160
+ * In a worker, `process.disconnect` exists, but it is not this function;
161
+ * it is `disconnect()`.
162
+ *
163
+ * Because long living server connections may block workers from disconnecting, it
164
+ * may be useful to send a message, so application specific actions may be taken to
165
+ * close them. It also may be useful to implement a timeout, killing a worker if
166
+ * the `'disconnect'` event has not been emitted after some time.
167
+ *
168
+ * ```js
169
+ * if (cluster.isPrimary) {
170
+ * const worker = cluster.fork();
171
+ * let timeout;
172
+ *
173
+ * worker.on('listening', (address) => {
174
+ * worker.send('shutdown');
175
+ * worker.disconnect();
176
+ * timeout = setTimeout(() => {
177
+ * worker.kill();
178
+ * }, 2000);
179
+ * });
180
+ *
181
+ * worker.on('disconnect', () => {
182
+ * clearTimeout(timeout);
183
+ * });
184
+ *
185
+ * } else if (cluster.isWorker) {
186
+ * const net = require('net');
187
+ * const server = net.createServer((socket) => {
188
+ * // Connections never end
189
+ * });
190
+ *
191
+ * server.listen(8000);
192
+ *
193
+ * process.on('message', (msg) => {
194
+ * if (msg === 'shutdown') {
195
+ * // Initiate graceful close of any connections to server
196
+ * }
197
+ * });
198
+ * }
199
+ * ```
200
+ * @since v0.7.7
201
+ * @return A reference to `worker`.
202
+ */
203
+ disconnect(): void;
204
+ /**
205
+ * This function returns `true` if the worker is connected to its primary via its
206
+ * IPC channel, `false` otherwise. A worker is connected to its primary after it
207
+ * has been created. It is disconnected after the `'disconnect'` event is emitted.
208
+ * @since v0.11.14
209
+ */
210
+ isConnected(): boolean;
211
+ /**
212
+ * This function returns `true` if the worker's process has terminated (either
213
+ * because of exiting or being signaled). Otherwise, it returns `false`.
214
+ *
215
+ * ```js
216
+ * import cluster from 'cluster';
217
+ * import http from 'http';
218
+ * import { cpus } from 'os';
219
+ * import process from 'process';
220
+ *
221
+ * const numCPUs = cpus().length;
222
+ *
223
+ * if (cluster.isPrimary) {
224
+ * console.log(`Primary ${process.pid} is running`);
225
+ *
226
+ * // Fork workers.
227
+ * for (let i = 0; i < numCPUs; i++) {
228
+ * cluster.fork();
229
+ * }
230
+ *
231
+ * cluster.on('fork', (worker) => {
232
+ * console.log('worker is dead:', worker.isDead());
233
+ * });
234
+ *
235
+ * cluster.on('exit', (worker, code, signal) => {
236
+ * console.log('worker is dead:', worker.isDead());
237
+ * });
238
+ * } else {
239
+ * // Workers can share any TCP connection. In this case, it is an HTTP server.
240
+ * http.createServer((req, res) => {
241
+ * res.writeHead(200);
242
+ * res.end(`Current process\n ${process.pid}`);
243
+ * process.kill(process.pid);
244
+ * }).listen(8000);
245
+ * }
246
+ * ```
247
+ * @since v0.11.14
248
+ */
249
+ isDead(): boolean;
250
+ /**
251
+ * This property is `true` if the worker exited due to `.disconnect()`.
252
+ * If the worker exited any other way, it is `false`. If the
253
+ * worker has not exited, it is `undefined`.
254
+ *
255
+ * The boolean `worker.exitedAfterDisconnect` allows distinguishing between
256
+ * voluntary and accidental exit, the primary may choose not to respawn a worker
257
+ * based on this value.
258
+ *
259
+ * ```js
260
+ * cluster.on('exit', (worker, code, signal) => {
261
+ * if (worker.exitedAfterDisconnect === true) {
262
+ * console.log('Oh, it was just voluntary – no need to worry');
263
+ * }
264
+ * });
265
+ *
266
+ * // kill worker
267
+ * worker.kill();
268
+ * ```
269
+ * @since v6.0.0
270
+ */
271
+ exitedAfterDisconnect: boolean;
272
+ /**
273
+ * events.EventEmitter
274
+ * 1. disconnect
275
+ * 2. error
276
+ * 3. exit
277
+ * 4. listening
278
+ * 5. message
279
+ * 6. online
280
+ */
281
+ addListener(event: string, listener: (...args: any[]) => void): this;
282
+ addListener(event: 'disconnect', listener: () => void): this;
283
+ addListener(event: 'error', listener: (error: Error) => void): this;
284
+ addListener(event: 'exit', listener: (code: number, signal: string) => void): this;
285
+ addListener(event: 'listening', listener: (address: Address) => void): this;
286
+ addListener(event: 'message', listener: (message: any, handle: net.Socket | net.Server) => void): this; // the handle is a net.Socket or net.Server object, or undefined.
287
+ addListener(event: 'online', listener: () => void): this;
288
+ emit(event: string | symbol, ...args: any[]): boolean;
289
+ emit(event: 'disconnect'): boolean;
290
+ emit(event: 'error', error: Error): boolean;
291
+ emit(event: 'exit', code: number, signal: string): boolean;
292
+ emit(event: 'listening', address: Address): boolean;
293
+ emit(event: 'message', message: any, handle: net.Socket | net.Server): boolean;
294
+ emit(event: 'online'): boolean;
295
+ on(event: string, listener: (...args: any[]) => void): this;
296
+ on(event: 'disconnect', listener: () => void): this;
297
+ on(event: 'error', listener: (error: Error) => void): this;
298
+ on(event: 'exit', listener: (code: number, signal: string) => void): this;
299
+ on(event: 'listening', listener: (address: Address) => void): this;
300
+ on(event: 'message', listener: (message: any, handle: net.Socket | net.Server) => void): this; // the handle is a net.Socket or net.Server object, or undefined.
301
+ on(event: 'online', listener: () => void): this;
302
+ once(event: string, listener: (...args: any[]) => void): this;
303
+ once(event: 'disconnect', listener: () => void): this;
304
+ once(event: 'error', listener: (error: Error) => void): this;
305
+ once(event: 'exit', listener: (code: number, signal: string) => void): this;
306
+ once(event: 'listening', listener: (address: Address) => void): this;
307
+ once(event: 'message', listener: (message: any, handle: net.Socket | net.Server) => void): this; // the handle is a net.Socket or net.Server object, or undefined.
308
+ once(event: 'online', listener: () => void): this;
309
+ prependListener(event: string, listener: (...args: any[]) => void): this;
310
+ prependListener(event: 'disconnect', listener: () => void): this;
311
+ prependListener(event: 'error', listener: (error: Error) => void): this;
312
+ prependListener(event: 'exit', listener: (code: number, signal: string) => void): this;
313
+ prependListener(event: 'listening', listener: (address: Address) => void): this;
314
+ prependListener(event: 'message', listener: (message: any, handle: net.Socket | net.Server) => void): this; // the handle is a net.Socket or net.Server object, or undefined.
315
+ prependListener(event: 'online', listener: () => void): this;
316
+ prependOnceListener(event: string, listener: (...args: any[]) => void): this;
317
+ prependOnceListener(event: 'disconnect', listener: () => void): this;
318
+ prependOnceListener(event: 'error', listener: (error: Error) => void): this;
319
+ prependOnceListener(event: 'exit', listener: (code: number, signal: string) => void): this;
320
+ prependOnceListener(event: 'listening', listener: (address: Address) => void): this;
321
+ prependOnceListener(event: 'message', listener: (message: any, handle: net.Socket | net.Server) => void): this; // the handle is a net.Socket or net.Server object, or undefined.
322
+ prependOnceListener(event: 'online', listener: () => void): this;
323
+ }
324
+ export interface Cluster extends EventEmitter {
325
+ disconnect(callback?: () => void): void;
326
+ fork(env?: any): Worker;
327
+ /** @deprecated since v16.0.0 - use isPrimary. */
328
+ readonly isMaster: boolean;
329
+ readonly isPrimary: boolean;
330
+ readonly isWorker: boolean;
331
+ schedulingPolicy: number;
332
+ readonly settings: ClusterSettings;
333
+ /** @deprecated since v16.0.0 - use setupPrimary. */
334
+ setupMaster(settings?: ClusterSettings): void;
335
+ /**
336
+ * `setupPrimary` is used to change the default 'fork' behavior. Once called, the settings will be present in cluster.settings.
337
+ */
338
+ setupPrimary(settings?: ClusterSettings): void;
339
+ readonly worker?: Worker | undefined;
340
+ readonly workers?: NodeJS.Dict<Worker> | undefined;
341
+ readonly SCHED_NONE: number;
342
+ readonly SCHED_RR: number;
343
+ /**
344
+ * events.EventEmitter
345
+ * 1. disconnect
346
+ * 2. exit
347
+ * 3. fork
348
+ * 4. listening
349
+ * 5. message
350
+ * 6. online
351
+ * 7. setup
352
+ */
353
+ addListener(event: string, listener: (...args: any[]) => void): this;
354
+ addListener(event: 'disconnect', listener: (worker: Worker) => void): this;
355
+ addListener(event: 'exit', listener: (worker: Worker, code: number, signal: string) => void): this;
356
+ addListener(event: 'fork', listener: (worker: Worker) => void): this;
357
+ addListener(event: 'listening', listener: (worker: Worker, address: Address) => void): this;
358
+ addListener(event: 'message', listener: (worker: Worker, message: any, handle: net.Socket | net.Server) => void): this; // the handle is a net.Socket or net.Server object, or undefined.
359
+ addListener(event: 'online', listener: (worker: Worker) => void): this;
360
+ addListener(event: 'setup', listener: (settings: ClusterSettings) => void): this;
361
+ emit(event: string | symbol, ...args: any[]): boolean;
362
+ emit(event: 'disconnect', worker: Worker): boolean;
363
+ emit(event: 'exit', worker: Worker, code: number, signal: string): boolean;
364
+ emit(event: 'fork', worker: Worker): boolean;
365
+ emit(event: 'listening', worker: Worker, address: Address): boolean;
366
+ emit(event: 'message', worker: Worker, message: any, handle: net.Socket | net.Server): boolean;
367
+ emit(event: 'online', worker: Worker): boolean;
368
+ emit(event: 'setup', settings: ClusterSettings): boolean;
369
+ on(event: string, listener: (...args: any[]) => void): this;
370
+ on(event: 'disconnect', listener: (worker: Worker) => void): this;
371
+ on(event: 'exit', listener: (worker: Worker, code: number, signal: string) => void): this;
372
+ on(event: 'fork', listener: (worker: Worker) => void): this;
373
+ on(event: 'listening', listener: (worker: Worker, address: Address) => void): this;
374
+ on(event: 'message', listener: (worker: Worker, message: any, handle: net.Socket | net.Server) => void): this; // the handle is a net.Socket or net.Server object, or undefined.
375
+ on(event: 'online', listener: (worker: Worker) => void): this;
376
+ on(event: 'setup', listener: (settings: ClusterSettings) => void): this;
377
+ once(event: string, listener: (...args: any[]) => void): this;
378
+ once(event: 'disconnect', listener: (worker: Worker) => void): this;
379
+ once(event: 'exit', listener: (worker: Worker, code: number, signal: string) => void): this;
380
+ once(event: 'fork', listener: (worker: Worker) => void): this;
381
+ once(event: 'listening', listener: (worker: Worker, address: Address) => void): this;
382
+ once(event: 'message', listener: (worker: Worker, message: any, handle: net.Socket | net.Server) => void): this; // the handle is a net.Socket or net.Server object, or undefined.
383
+ once(event: 'online', listener: (worker: Worker) => void): this;
384
+ once(event: 'setup', listener: (settings: ClusterSettings) => void): this;
385
+ prependListener(event: string, listener: (...args: any[]) => void): this;
386
+ prependListener(event: 'disconnect', listener: (worker: Worker) => void): this;
387
+ prependListener(event: 'exit', listener: (worker: Worker, code: number, signal: string) => void): this;
388
+ prependListener(event: 'fork', listener: (worker: Worker) => void): this;
389
+ prependListener(event: 'listening', listener: (worker: Worker, address: Address) => void): this;
390
+ // the handle is a net.Socket or net.Server object, or undefined.
391
+ prependListener(event: 'message', listener: (worker: Worker, message: any, handle?: net.Socket | net.Server) => void): this;
392
+ prependListener(event: 'online', listener: (worker: Worker) => void): this;
393
+ prependListener(event: 'setup', listener: (settings: ClusterSettings) => void): this;
394
+ prependOnceListener(event: string, listener: (...args: any[]) => void): this;
395
+ prependOnceListener(event: 'disconnect', listener: (worker: Worker) => void): this;
396
+ prependOnceListener(event: 'exit', listener: (worker: Worker, code: number, signal: string) => void): this;
397
+ prependOnceListener(event: 'fork', listener: (worker: Worker) => void): this;
398
+ prependOnceListener(event: 'listening', listener: (worker: Worker, address: Address) => void): this;
399
+ // the handle is a net.Socket or net.Server object, or undefined.
400
+ prependOnceListener(event: 'message', listener: (worker: Worker, message: any, handle: net.Socket | net.Server) => void): this;
401
+ prependOnceListener(event: 'online', listener: (worker: Worker) => void): this;
402
+ prependOnceListener(event: 'setup', listener: (settings: ClusterSettings) => void): this;
403
+ }
404
+ const cluster: Cluster;
405
+ export default cluster;
406
+ }
407
+ declare module 'node:cluster' {
408
+ export * from 'cluster';
409
+ export { default as default } from 'cluster';
410
+ }