n2o v4.4 fork https://github.com/synrc/n2o/commits/refs/tags/4.4

221V f1455f3610 readme 3 years ago
ebin 4e95755214 n2o to n4u - application, js 3 years ago
include ccf607f982 api.hrl to n4u_api.hrl 3 years ago
priv 4e95755214 n2o to n4u - application, js 3 years ago
src dd3da0415e N2O to N4U - description 3 years ago
test c8a0c2a434 wf.hrl to n4u.hrl 3 years ago
.gitignore a1c0a79ff8 n2o to n4u - include_lib - compile with Emakefile 3 years ago
CHANGELOG.md ac41c5a4cc v 4.4.20 , changelog 3 years ago
LICENSE f1455f3610 readme 3 years ago
PEOPLE_4.4.md 046f95acf9 people 3 years ago
README.md f1455f3610 readme 3 years ago
rebar.config ec9e03a698 erl 20.0 - fix warnings 3 years ago

README.md

N4U (N2O FOR YOU): Erlang Application Server

Dependencies

do not forget

sudo apt-get install esl-erlang
# or install erlang with kerl

sudo apt-get install git
sudo apt-get install gcc
sudo apt-get install make
sudo apt-get install build-essential
sudo apt-get install inotify-tools

Features

  • Formatters: BERT, JSON — changeable on the fly
  • Protocols: N2O, NITRO, SPA, FTP
  • Endpoints: WebSocket, HTTP, REST
  • High Performance Protocol Relay
  • Smallest possible codebase — 1K LOC
  • BEAM/LING support on posix, arm, mips and xen platforms
  • Single-file atomic packaging with MAD
  • Handlers
    • PubSub: MQS, GPROC, SYN
    • Templates: DTL, NITRO
    • Sessions: server driven
    • DOM Language: SHEN JavaScript Compiler
    • Error Logging: IO, LOGGER
    • Security: PLAIN, AES CBC 128
  • Speed: 30K conn/s at notebook easily
  • Samples: Skyline (DSL), Games (SPA), Review (KVS), Sample (MAD)

Message Formatters

You can use any message formmatter at the bottom of N2O protocol. IO messages supported by the N2O protocol are as follows:

1. BERT : {io,"console.log('hello')",1}
2. WAMP : [io,"console.log('hello')",1]
3. JSON : {name:io,eval:"console.log('hello')",data:1}
4. TEXT : IO console.log('hello') 1\n
5. XML  : <io><eval>console.log('hello')</eval><data>1</data></io>

Besides, you can even switch a channel termination formatter on the fly within one WebSocket session.

All Features in One snippet

-module(index).
-compile([export_all, nowarn_export_all]).
-include_lib("nitro/include/nitro.hrl").
-include_lib("n4u/include/n4u.hrl").

peer()    -> io_lib:format("~p",[wf:peer(?REQ)]).
message() -> wf:js_escape(wf:html_encode(wf:q(message))).
main()    -> #dtl{file="index",app=n2o_sample,bindings=[{body,body()}]}.
body() ->
    {Pid,_} = wf:async(fun(X) -> chat_loop(X) end),
    [ #panel{id=history}, #textbox{id=message},
      #button{id=send,body="Chat",postback={chat,Pid},source=[message]} ].

event(init) -> wf:reg(room);
event({chat,Pid}) -> Pid ! {peer(), message()};
event(Event) -> skip.

chat_loop({Peer, Message} ) ->
       wf:insert_bottom(history,#panel{body=[Peer,": ",Message,#br{}]}),
       wf:flush(room) end.

Documentation

  • Official N2O v4.4 Book (outdated) PDF

OM A HUM