Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/derhuerst/websocket-pool
A pool of WebSocket connections. Supports reconnecting.
https://github.com/derhuerst/websocket-pool
load-balancer pool reconnect websocket
Last synced: 5 days ago
JSON representation
A pool of WebSocket connections. Supports reconnecting.
- Host: GitHub
- URL: https://github.com/derhuerst/websocket-pool
- Owner: derhuerst
- License: isc
- Created: 2018-07-14T17:19:55.000Z (over 6 years ago)
- Default Branch: master
- Last Pushed: 2022-07-22T13:51:54.000Z (over 2 years ago)
- Last Synced: 2024-10-18T09:34:18.677Z (26 days ago)
- Topics: load-balancer, pool, reconnect, websocket
- Language: JavaScript
- Homepage: https://github.com/derhuerst/websocket-pool#websocket-pool
- Size: 18.6 KB
- Stars: 19
- Watchers: 3
- Forks: 2
- Open Issues: 0
-
Metadata Files:
- Readme: readme.md
- License: license.md
Awesome Lists containing this project
README
# websocket-pool
**A pool of [WebSocket](https://en.wikipedia.org/wiki/WebSocket) connections. Supports reconnecting.** Allows load-balancing messages over multiple WebSocket servers, using any [scheduling scheme](https://en.wikipedia.org/wiki/Scheduling_(computing)#Scheduling_disciplines) (e.g. [round robin](https://en.wikipedia.org/wiki/Round-robin_scheduling)).
[![npm version](https://img.shields.io/npm/v/websocket-pool.svg)](https://www.npmjs.com/package/websocket-pool)
[![build status](https://api.travis-ci.org/derhuerst/websocket-pool.svg?branch=master)](https://travis-ci.org/derhuerst/websocket-pool)
![ISC-licensed](https://img.shields.io/github/license/derhuerst/websocket-pool.svg)
[![support me via GitHub Sponsors](https://img.shields.io/badge/support%20me-donate-fa7664.svg)](https://github.com/sponsors/derhuerst)
[![chat with me on Twitter](https://img.shields.io/badge/chat%20with%20me-on%20Twitter-1da1f2.svg)](https://twitter.com/derhuerst)## Installation
```shell
npm install websocket-pool
```## Usage
```js
const createPool = require('websocket-pool')
const WebSocket = require('ws')
const createRoundRobin = require('@derhuerst/round-robin-scheduler')const pool = createPool(WebSocket, createRoundRobin)
// incoming message, just like websocket.on('message')
pool.on('message', (msg) => {
console.log('<-', msg.data)
pool.close()
})// >= 1 connection in the pool is open
pool.once('open', () => {
pool.send('hello there')
})// the pool failed to reconnect after retrying
pool.on('error', (err) => {
console.error(err)
})const urls = [
'ws://echo.websocket.org/#1',
'ws://echo.websocket.org/#2',
'ws://echo.websocket.org/#3'
]
for (let url of urls) pool.add(url)
````websocket-pool` accepts any [`WebSocket`](https://developer.mozilla.org/en-US/docs/Web/API/WebSocket) implementation. For example, you can use the native implementation in browsers or [`ws`](https://npmjs.com/package/ws) in Node.
The `createScheduler` function must implement the [`abstract-scheduler` interface](https://github.com/derhuerst/abstract-scheduler).
## Related
- [`reconnecting-websocket`](https://www.npmjs.com/package/reconnecting-websocket) – If want to connect to only one server.
- [`node-pool`](https://github.com/coopernurse/node-pool) – Generic pool. You have to write the adapter to the resource.## Contributing
If you have a question or need support using `websocket-pool`, please double-check your code and setup first. If you think you have found a bug or want to propose a feature, refer to [the issues page](https://github.com/derhuerst/websocket-pool/issues).