Singletron
This is a thin wrapper around node-ipc
to simplify inter-process communication among Electron apps. The main aim is to allow apps to share a single instance of Electron, to minimize memory foot-print.
Currently, this is just a proof-of-concept, and not meant for production use. Please refer to on-going discussion in the Electron repo about sharing a runtime among apps.
Usage
For a working demonstration, see singletron-example.
Below is an example of how to set up the server/clients. Please note that startApp
and createWindow
are defined earlier in the file.
In main.js
(main process):
const singletron = // Share single instance of Electron singletron
Methods
createClient( options )
options = clientId: 'singletronClient' serverId: 'singletronServer'
Returns a promise that resolves if connected to an existing server.
On success, the then()
handler will receive an object with two properties:
client
is an instance ofnode-ipc
.client.emit( eventName, data )
- Send a message to serverclient.on( eventName, (data, socket) => {} )
- Listen to message from server
config
is an object that the server sentid
- server IDversions
-{ node, chrome, electron }
It's up to the app how to negotiate with the server. In the example above, the client requests to open a new window with its index.html
, then quits when it's loaded.
If no server is found, it throws: you can catch()
it and start a server.
createServer( options )
options = serverId: 'singletronServer'
Returns a promise that resolves if server was created successfully.
On success, the then()
handler will receive an object with two properties:
server
is an instance ofnode-ipc
.server.emit( socket, eventName, data )
- Send a message to client specified bysocket
server.on( eventName, (data, socket) => {} )
- Listen to message from client
config
is the same object as described for client above
It's up to the app how to negotiate with the client. In the example above, the server listens for a request to open a new window with given URL.