N2O as a Platform

As a platform N2O provides a set of techniques applicable and useful for ML languages and Erlang, but it seems that N2O discipline is helpful in other programming languages too. As an enterprise protocol federation N2O provides solid XMPP/WS/CORBA replacement, defining the following services that could run in a distributed environment: business process management, distributed data storage, application framework, publish/subscribe broker, messaging and chat services, etc.

N2O as an Application Server

O7 ECO is an Erlang N2O implementation of application services run inside Erlang virtual machine. Each service implemented as protocol module that can be injected to N2O accept looper. Developing application for N2O means writing your application protocol modules that handle pure logic.

As Erlang/OTP application N2O is an embeddable message protocol loop library for WebSocket, MQTT, and TCP servers, it provides basic features, such as process management; virtual nodes ring for request processing; session, encoding, MQ, cache and log services.

The main two usages of N2O: 1) live in client connection processes of server; 2) live in server workers and handle all requests from client processes. You can add you own feature-set versions of N2O with different Github repositories. N2O is distributed by modules not as monolith application, so you can pick and pack different feature combinations.

realtime DHT processes and rest storage chains
> :supervisor.which_children(:n2o) [ {{:ws, '/chat/ws/4'}, #PID<0.985.0>, :worker, [:n2o_ws]}, {{:ws, '/chat/ws/3'}, #PID<0.984.0>, :worker, [:n2o_ws]}, {{:ws, '/chat/ws/2'}, #PID<0.983.0>, :worker, [:n2o_ws]}, {{:ws, '/chat/ws/1'}, #PID<0.982.0>, :worker, [:n2o_ws]}, {{:mqtt, '/erp/mqtt/4'}, #PID<0.977.0>, :worker, [:n2o_mqtt]}, {{:mqtt, '/erp/mqtt/3'}, #PID<0.976.0>, :worker, [:n2o_mqtt]}, {{:mqtt, '/erp/mqtt/2'}, #PID<0.975.0>, :worker, [:n2o_mqtt]}, {{:mqtt, '/erp/mqtt/1'}, #PID<0.974.0>, :worker, [:n2o_mqtt]}, {{:mqtt, '/bpe/mqtt/4'}, #PID<0.977.0>, :worker, [:n2o_mqtt]}, {{:mqtt, '/bpe/mqtt/3'}, #PID<0.976.0>, :worker, [:n2o_mqtt]}, {{:mqtt, '/bpe/mqtt/2'}, #PID<0.975.0>, :worker, [:n2o_mqtt]}, {{:mqtt, '/bpe/mqtt/1'}, #PID<0.974.0>, :worker, [:n2o_mqtt]}, {{:caching, 'timer'}, #PID<0.969.0>, :worker, [:n2o]} ] > :kvs.all :writer [ {:writer, '/bpe/proc', 2, [], [], []}, {:writer, '/erp/group', 1, [], [], []}, {:writer, '/erp/partners', 7, [], [], []}, {:writer, '/acc/synrc/Kyiv', 3, [], [], []}, {:writer, '/chat/5HT', 1, [], [], []}, {:writer, '/bpe/hist/1562187187807717000', 16, [], [], []}, {:writer, '/bpe/hist/1562192587632329000', 1, [], [], []} ]

N2O as a Web Framework

Web logic should be as much declarative as possible at the same time the language should be readable by Java, .NET engineers. NITRO protocol is what we called Web Framework inside N2O ecosystem. If you plug the NITRO module, you automatically enable web framework for all devices. It resembles Nitrogen API, well known Erlang Web Framework.

Here is example of Application powered by N2O Application Server. You may read more in articles/web.

Picture 3. NITRO sample application