Node-M2M is a machine-to-machine communication framework using HTTP and WebSocket as data transport protocol. It has a simple architecture consisting of three core components - a routing server, a user management interface, and all the connected client and device applications.
It takes advantage of the computational power of modern computers such as multi-core x64 processors and low-power 64-bit arm processors where most of the data processing are done right on the client's and device's hardware away from the central server resources.

Secure from the start

Remote client and device nodes must be connected to the internet behind firewall with zero configuration. Zero configuration means less vulnerabilities. It uses the default port 443 for secure communications using TLS for all interactive communications between clients and devices.

During the initial client and device communication, each node submits an encrypted user credentials into the server for authentication. The server then generates a set of user tokens and send it back to clients and devices for subsequent authentication during its interactive communication sessions.

Access to clients and devices is restricted to authenticated and authorized users only. This restriction creates a secure private virtual network for each user that is totally isolated from other connected users.

Simple API

Currently, an npm module - m2m is available as JavaScript communication library. However in the future, bindings can be created for other popular languages such as C, C++, C#, and Java. For now, users can use an IPC (inter-process-communication) to access data from other applications using programming languages other than JavaScript.

The API is designed as a FaaS (Function as a Service) also called "serverless" allowing users to easily create applications in telematics, telemetry, IoT, data acquisition and control, and many others.

Flexible Application Model

Develop applications using a client-server or master-slave communication model where clients send requests for available resources/services from remote devices.

You can also develop applications using a pub-sub model and use the API's built-in watch/unwatch methods making your application bandwidth-efficient and simpler.

Deploy your client applications on-prem or in the cloud

You can run your client applications locally or you can deploy them in the cloud.

A good option is to host your client applications on-prem using low-power ARM based single board computers (SBC) such as Raspberry Pi's or any Intel-based/x64 low-power devices.

If your remote devices are using one of these low-power SBC's, you can even host your client applications alongside with the remote device/server applications in the same SBC.