Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/eliot-akira/singletron
Inter-process communication hub for Electron apps
https://github.com/eliot-akira/singletron
Last synced: about 1 month ago
JSON representation
Inter-process communication hub for Electron apps
- Host: GitHub
- URL: https://github.com/eliot-akira/singletron
- Owner: eliot-akira
- Created: 2017-05-09T02:48:25.000Z (over 7 years ago)
- Default Branch: master
- Last Pushed: 2017-05-09T15:19:14.000Z (over 7 years ago)
- Last Synced: 2024-09-10T15:03:57.802Z (2 months ago)
- Language: JavaScript
- Size: 8.79 KB
- Stars: 0
- Watchers: 3
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Singletron
This is a thin wrapper around [`node-ipc`](https://github.com/RIAEvangelist/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](https://github.com/electron/electron/issues/673) about sharing a runtime among apps.
## Usage
For a working demonstration, see [singletron-example](https://github.com/eliot-akira/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):
```js
const singletron = require('singletron')// Share single instance of Electron
singletron.createClient().then(({ client, config }) => {
console.log('Connected to singletron server', config)
client.on('loaded', () => app.quit())
client.emit('load', path.join(__dirname, 'index.html'))
}).catch((e) => {
// Start the app instance
startApp()// Start singletron server
singletron.createServer().then(({ server, config }) => {
console.log('Singletron server started', config)
// Request from client
server.on('load', (data, socket) => {console.log('Request for new window', data)
// Create window for new app
createWindow(data)server.emit(socket, 'loaded')
})}).catch((e) => {
console.log('Error creating singletron server')
})
})
```## Methods
#### createClient( options )
```js
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 of `node-ipc`.
- `client.emit( eventName, data )` - Send a message to server
- `client.on( eventName, (data, socket) => {} )` - Listen to message from server
- `config` is an object that the server sent
- `id` - server ID
- `versions` - `{ 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 )
```js
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 of `node-ipc`.
- `server.emit( socket, eventName, data )` - Send a message to client specified by `socket`
- `server.on( eventName, (data, socket) => {} )` - Listen to message from client
- `config` is the same object as described for client aboveIt'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.