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

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

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