doc: make socket IPC examples more robust
This commit aims to improve the documentation examples that send sockets over IPC channels. Specifically, pauseOnConnect is added to a server that inspects the socket before sending and a 'message' handler adds a check that the socket still exists. PR-URL: https://github.com/nodejs/node/pull/13196 Reviewed-By: Santiago Gimeno <santiago.gimeno@gmail.com> Reviewed-By: Refael Ackermann <refack@gmail.com>
This commit is contained in:
parent
d1871a22c0
commit
c02dcc7b59
@ -1141,8 +1141,9 @@ handle connections with "normal" or "special" priority:
|
||||
const normal = require('child_process').fork('child.js', ['normal']);
|
||||
const special = require('child_process').fork('child.js', ['special']);
|
||||
|
||||
// Open up the server and send sockets to child
|
||||
const server = require('net').createServer();
|
||||
// Open up the server and send sockets to child. Use pauseOnConnect to prevent
|
||||
// the sockets from being read before they are sent to the child process.
|
||||
const server = require('net').createServer({ pauseOnConnect: true });
|
||||
server.on('connection', (socket) => {
|
||||
|
||||
// If this is special priority
|
||||
@ -1162,7 +1163,12 @@ to the event callback function:
|
||||
```js
|
||||
process.on('message', (m, socket) => {
|
||||
if (m === 'socket') {
|
||||
socket.end(`Request handled with ${process.argv[2]} priority`);
|
||||
if (socket) {
|
||||
// Check that the client socket exists.
|
||||
// It is possible for the socket to be closed between the time it is
|
||||
// sent and the time it is received in the child process.
|
||||
socket.end(`Request handled with ${process.argv[2]} priority`);
|
||||
}
|
||||
}
|
||||
});
|
||||
```
|
||||
@ -1172,6 +1178,10 @@ tracking when the socket is destroyed. To indicate this, the `.connections`
|
||||
property becomes `null`. It is recommended not to use `.maxConnections` when
|
||||
this occurs.
|
||||
|
||||
It is also recommended that any `'message'` handlers in the child process
|
||||
verify that `socket` exists, as the connection may have been closed during the
|
||||
time it takes to send the connection to the child.
|
||||
|
||||
*Note*: This function uses [`JSON.stringify()`][] internally to serialize the
|
||||
`message`.
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user