Standards
Set of ISO and RFC documents that regulate standards used in ERP.UNO:
— RFC 768 UDP,
— RFC 7414 TCP,
— RFC 3629 UTF-8,
— RFC 4180 CSV,
— RFC 6455 The WebSocket Protocol,
— RFC 2251-2256 LDAP v3,
— RFC 5246 TLS v1.2,
— RFC 8446 TLS v1.3,
— RFC 6960 OCSP,
— RFC 5280 X.509,
— RFC 1034-1035 DNS,
— RFC 4033-4035 DNSSEC,
— RFC 2904 AAA Authorization Framework,
— ISO 20922 MQTT 3.1.1,
— ISO 8601 Date and Time on the Internet,
— ISO 8824-8825 ASN.1,
— ISO 19510 BPMN 2.0,
— ISO 19514 SysML,
— ISO 42010 Systems and software engineering,
— ISO 27036 Information security for supplier relationships,
— ISO 29146 A framework for access management,
— NIST SP 800-162 Guide to ABAC Definition and Considerations,
— SPEC WHATWG ORG
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.
> :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.
