websemaphore
v0.9.41
Published
Handle concurrency in the cloud with ease with serverless semaphores. This is the TS/JS client for https://www.websemaphore.com
Downloads
28
Maintainers
Readme
WebSemaphore client library for TypeScript/JavaScript
This is the official typescript/javacscript client library for WebSemaphore. WebSemaphore aims to provide seamless process synchronization in highly distributed environments.
If you need to have control over concurrent/exclusive access to a resource, potentially across multiple systems, but would prefer to stay focused on your actual use case, WebSemaphore wants to be your friend.
Please see WebSemaphore Docs for more info.
For usage instructions, please see Usage on the official website.
Quick start - should take just a few minutes:
Get an account at WebSemaphore Signup
Create a semaphore and configure maximum concurrent thoughput (maxValue).
Create an Api Key
Install this library:
npm i --save websemaphore
Use in code
5.1 HTTP version
import { WebSemaphoreHttpClientManager } from "websemaphore"; import fetch from "node-fetch"; const websemaphoreManager = WebSemaphoreHttpClientManager(); const websemaphoreClient = websemaphoreManager.initialize({ fetch, token: APIKEY }); const initHandler = (...) => { // ... const resp = await websemaphoreClient.semaphore.acquire(SEMAPHORE_ID, msg as any); // ... } const processingHandler = (...) => { // ... // do work // ... const resp = await websemaphoreClient.semaphore.release(SEMAPHORE_ID, { channelId: "default" }); // ... }
5.2 Websockets version:
import { WebSemaphoreWebsocketsClientManager } from "websemaphore"; const manager = WebSemaphoreWebsocketsClientManager({ websockets: WebSocket }); const client = await manager.connect(APIKEY); const { release, payload, status } = await webSemaphoreClient.acquire({ semaphoreId: SEMAPHORE_ID, sync: false, body: { some: "abstract", data: 10 } }); // ... await process(payload, log); // ... release(); await manager.disconnect();
Examples
See reference examples in the websemaphore-examples repo.