A powerful and smooth client/server sockets library for browser and Node.js, written in TypeScript with very few dependencies.
✔️ Written in TypeScript.
✔️ Support for both WebSockets and regular TCP sockets with a unified interface.
✔️ Works both in NodeJS and browser.
✔️ Supports SSL/TLS encryption with certificates.
✔️ Test suite of 105 tests.
WebSockets are a must when using a browser, however plain TCP sockets are faster and a good choice when no browser is involved.
The overall interface for pocket-sockets WebSocket and TCP sockets are identical so it is easy to switch between the underlying implementations.
For a quick glimpse of what it looks like to set up a server that receives a string from clients, then replies back and closes the connection afterwards, follow the example below:
import {WSServer, WSClient, ClientInterface} from "pocket-sockets";
const server = new WSServer({
host: "localhost",
port: 8181
});
server.listen();
server.onConnection( (client: ClientInterface) => {
client.onData( (data: Buffer | string) => {
client.send("This is server: received!");
});
client.onClose( () => {
server.close();
});
});
const client = new WSClient({
host: "localhost",
port: 8181
});
client.connect();
client.onConnect( () => {
client.onData( (data: Buffer | string) => {
client.close();
});
client.send("This is client: hello");
});
For complete examples, please refer to the files under the ./example directory.
git clone https://github.com/bashlund/pocket-sockets.git
cd pocket-sockets
npm isntall
cd ./test/cert/ && ./generate_self_signed_cert.sh && cd ../..
npm test
git clone https://github.com/bashlund/pocket-sockets.git
cd pocket-sockets
npm isntall
npx ts-node ./example/example-ws.ts
npx ts-node ./example/example-tcp.ts
For browser examples, please refer to the files under the ./example directory.
npm add --save pocket-sockets
Code documentation and API references are available in the official Wiki: https://github.com/bashlund/pocket-sockets/wiki.
Lib written by @bashlund, tests and wiki nicely crafted by @filippsen.
This project is released under the MIT license.