0.0.5 • Published 7 years ago

singletron v0.0.5

Weekly downloads
3
License
MIT
Repository
github
Last release
7 years ago

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 = 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 )

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 )

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 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.

0.0.5

7 years ago

0.0.4

7 years ago

0.0.3

7 years ago

0.0.2

7 years ago

0.0.1

7 years ago