Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/emilbayes/pg-ipc
IPC over PostgreSQL LISTEN/NOTIFY/UNLISTEN exposed as an EventEmitter
https://github.com/emilbayes/pg-ipc
database ipc postgres pubsub
Last synced: about 2 months ago
JSON representation
IPC over PostgreSQL LISTEN/NOTIFY/UNLISTEN exposed as an EventEmitter
- Host: GitHub
- URL: https://github.com/emilbayes/pg-ipc
- Owner: emilbayes
- Created: 2017-02-01T08:52:49.000Z (almost 8 years ago)
- Default Branch: master
- Last Pushed: 2022-04-05T08:32:30.000Z (over 2 years ago)
- Last Synced: 2024-10-17T16:31:37.070Z (2 months ago)
- Topics: database, ipc, postgres, pubsub
- Language: JavaScript
- Size: 9.77 KB
- Stars: 31
- Watchers: 2
- Forks: 4
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# `pg-ipc`
> IPC over PostgreSQL LISTEN/NOTIFY/UNLISTEN exposed as an EventEmitter
## Usage
```js
var pgIPC = require('pg-ipc')
var client = new require('pg').Client({ ... })var ipc = pgIPC(client)
ipc.on('error', console.error)
ipc.on('end', function () {
client.end()
})ipc.on('someChannel', function (msg) {
// Ignore messages from this process
if (msg.processId === client.processID) return
console.log(msg.payload.currentTime)
})ipc.notify('someChannel', {currentTime: Date.now()})
// some time later ...
ipc.end()
```
## API
### `pgIPC(client)`
Instantiates a new `EventEmitter` with the appropriate hooks to automatically
`LISTEN`/`NOTIFY`/`UNLISTEN`. Note that `client` must be a `pg.Client` instance
and not a `pg.Pool`, as a single connection is required.### `ipc.on(channel, listener)`
All the standard `EventEmitter` methods are exposed. When a listener is added to
`channel`, a `LISTEN` command is automatically issued, and `UNLISTEN` when the
number of listeners reach zero. The listener will receive the message as its
first argument. Notable properties being `channel`, `payload`, `processId`. Each
postgres `connection` is assigned a unique `processId`, which can be used to
ignore messages from the same process.
See [`EventEmitter`](https://nodejs.org/api/events.html) for more details.
Reserved channels are:
`['newListener', 'removeListener', 'notify', 'unlisten', 'listen', 'error', 'end']`### `ipc.notify(channel[, payload])`
Alias: `ipc.send(channel[, payload])`. Send a message to `channel` with optional
`payload`. `payload` is transparently converted to JSON where appropriate.### `ipc.end()`
Issue `UNLISTEN *` if connected, emit `end` and detach all event listeners.
Does not call `client.end()` so you can continue using the client. However,
any listeners you've issued outside outside of this module will also be detached### Event: `listen`
Emitted when a `LISTEN` has been successfully issued. Passed `channel`
### Event: `notify`
Emitted after a notification has been successfully sent. Passed `channel` and `payload`
### Event: `unlisten`
Emitted when a `UNLISTEN` has been successfully issued. Passed `channel`
### Event: `end`
Emitted when all `LISTEN`s have been removed, but before all event listeners are removed.
### Event: `error`
Propagates any errors caused by queries on `Client`. Passed the `err` argument from
the query callback.## Install
```sh
npm install pg-ipc
```## License
[ISC](LICENSE.md)