Miss any of our Open RFC calls?Watch the recordings here! »

sand-socket

0.3.1 • Public • Published

Dependency Status devDependency Status NPM version

Sand

Sand is a very simple and lightweight implementation of the core node TCP socket, adding some usefull features like client management, packet separation, handshake and event oriented clients like socket.io.

Install

$ npm i -s sand-socket

Usage

The usage is very simple and inspired on socket.io, but you are going to use write instead of emit.

const SandSocket = require('sand-socket');
 
const server = new SandSocket();
 
// Listening for a new client connection
server.on('connected', async (client) => {
  
  // Writing a chat message to the client
  client.write('chat', JSON.stringify({
    text: "Feel free to write anything you want.",
    user: 'System'
  }));
  
  // Listening to a chat message from client
  client.on('chat', message => {
     
    // Sendin the message to all the other clients connected
    socket.writeToAll("chat", message);
  });
 
  // Listening for this client disconnection
  client.on('disconnected', message => {
    console.log("Client " + client.id + " disconnected.");
  });
});
 
// Starting server on the port 3000
server.listen(3000);

Server options

You can set options to the node server setting the serverOptions parameter in the Sand server options when creating it.

const SandSocket = require('sand-socket');
 
const options = {};
const server = new SandSocket({ serverOptions: options });

Delimiters

Sand packets are text-oriented, by default it just sends a string to the client using "\n" as the delimiter between packets, and "#e#" as the delimiter between event name and message. If you prefer, you can set any other delimiter by passing it to the socket constructor.

const SandSocket = require('sand-socket');
 
const packetDelimiter = "packetEndsHere";
const eventDelimiter = "eventNameEndsHere";
 
const server = new SandSocket(null, packetDelimiter, eventDelimiter);

TLS

Sand socket supports node core TLS implementation.

const fs = require("fs");
const SandSocket = require('sand-socket');
 
const options = { 
  key: fs.readFileSync("./path-to-key"),
  cert: fs.readFileSync("./path-to-cert")
};
 
const server = new SandSocket({ tls: true, serverOptions: options });

Verbose logging

In case you want to see what is happening behind the scenes, just activate the verbose log.

const SandSocket = require('sand-socket');
const server = new SandSocket();
server.verboseLog = true;

Concerns

The performance was not enough tested yet, and as long as it is a TCP socket and is text-based, it may not be the best option for an application that requires a lot of packets per second, like an action game.

Roadmap

  • Make logs optional. (Done)
  • Find a more performatic way to separate event and message.

These are what I'm planning to implement in the short-term, in case you have a suggestion feel free to contact me or open an issue :)

Clients

Install

npm i sand-socket

DownloadsWeekly Downloads

1

Version

0.3.1

License

MIT

Unpacked Size

13.4 kB

Total Files

10

Last publish

Collaborators

  • avatar