Skip to content

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

License

Notifications You must be signed in to change notification settings

ccadori/sand-socket

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

27 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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

About

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

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published