N2O

Точки підключення протоколів

Перелік типів кінцевих точок підключення протоколів, які підтримуються EMQ, та є доступними для N2O програм: WebSockets, MQTT, MQTT-SN, TCP, UDP, CoAP. Нормальним є використання N2O у якості веб фреймворка або сервера веб додатків з передачею даних по WebSockets, але для IoT та MQTT програм можна використовувати UDP чи SCTP протоколи, для забезпечення консистентності доставки повідомлень на рівні програми. Використовуючи MQTT в якості транспорту ми розширюємо підтримуваний набір протоколів кінцевих точок підключення.

MQTT

EMQ — брокер MQTT з відкритим кодом, написаний Feng Lee. N2O — це сумісний з EMQ плагін, являє собою заздалегідь визначені клієнти MQTT, які у вигляді кільця віртуальних вузлів обробляють протокольні запити та відповідають на клієнтські топіки, відповідно до класичної схеми "RPC через MQ". Список модулів нижче утворює ядро N2O, яке є загальним для MQTT та WebSocket версій:

  • n2o — Додаток N2O
    : MQTT and WS — 10KB
  • n2o_pi — Процеси N2O
    — 4KB
  • n2o_proto — Цикл N2O
    : — 1KB
  • n2o_ring — Кільце N2O
    : Хеш Кільце — 1KB
$ mad app mqtt review $ cd review $ mad dep com pla rep $ open http://127.0.0.1:8000

Список модулів, специфічних для MQTT версії:

  • n2o_auth — N2O MQTT Authentication
    : модуль аутентифікації MQTT — 1KB
  • n2o_mqtt — MQTT DHT Virtual Node

WebSocket

COWBOY — невеликий, швидкий та сучасний HTTP сервер, написаний Loïc Hoguin. У цій версії цикл N2O інтегрований як WebSocket cowboy обробник, який пересилає всі вхідні повідомлення до N2O. Список модулів, специфічних для WebSocket версії:

$ mad app web sample $ cd sample $ mad dep com pla rep $ open https://127.0.0.1:8001/app/index.htm

Протоколи

  • n2o_heart — PING protocol
  • n2o_ftp — N2O File Protocol
    : FTP — 4KB
  • n2o_nitro — N2O Nitrogen Web Framework Protocol
    : — 3KB

Сервіси

JavaScript

  • utf8.js — кодер/декодер UTF-8
  • zlib.js — алгоритм інфляції ZLIB
  • ieee754.js — кодер/декодер IEEE-754
  • bert.js — кодер/декодер BERT
  • n2o.js — протокольний цикл N2O
  • heart.js — протокол HEART
  • nitro.js — протокол NITRO
  • ftp.js — протокол FTP
  • mq.js — клієнт MQTT

Типова специфікація

N2O:
-type n2o() :: #bert{} | #json{} | #binary{} | #default{}. -type cx() :: #cx{}. -type formatter() :: binary | json | bert | text | default | atom(). -type response() :: { formatter(), binary() }. -record(ok, { data :: term() }). -record(error { data :: term() }. -record(reply, { msg :: n2o(), req :: term(), ctx :: cx() } ). -record(unknown, { msg :: n2o(), req :: term(), ctx :: cx() } ). -spec start(#pi{}) -> {pid(),term()} | #error{}. -spec stop(term(),atom()) -> #pi{} | #error{}. -spec proc(atom(),#pi{}) -> term(). -spec info(term(),term(),#cx{}) -> #reply{} | #unknown{}. -record(pi, { name :: term(), table :: atom(), sup :: atom(), module :: atom(), state :: term() }). -record(cx, { handlers = [] :: list({atom(),atom()}), actions = [] :: list(tuple()), req = [] :: [] | term(), module = [] :: [] | atom(), lang = [] :: [] | atom(), path = [] :: [] | binary(), session = [] :: [] | binary(), formatter = bert :: bert | json | atom(), params = [] :: [] | list(tuple()), node = [] :: [] | atom(), client_pid= [] :: [] | term(), state = [] :: [] | term(), from = [] :: [] | binary(), vsn = [] :: [] | binary() }). -type memtable() :: atom(). -spec encode(tuple()) -> binary(). -spec decode(binary()) -> tuple(). -spec session(term(),term()) -> term(). -spec session(term()) -> term(). -spec cache(memtable(),term(),term()) -> term(). -spec cache(memtable(),term()) -> term().