Sign Up for Free

RunKit +

Try any Node.js package right in your browser

This is a playground to test code. It runs a full Node.js environment and already has all of npm’s 1,000,000+ packages pre-installed, including sand-socket with all npm packages installed. Try it out:

var sandSocket = require("sand-socket")

This service is provided by RunKit and is not affiliated with npm, Inc or the package authors.

sand-socket v0.3.1

Sand is a lightweight implementation of net tcp socket.

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

RunKit is a free, in-browser JavaScript dev environment for prototyping Node.js code, with every npm package installed. Sign up to share your code.
Sign Up for Free