Erlang/Elixir精選-第1期
阿新 • • 發佈:2019-12-03
第1期(20191202)
文章
- A short guide to the structure and internals of the Erlang distributed messaging facility.
Erlang分散式啟動流程原始碼閱讀指南:- 節點啟動時通過
epmd
互相發現彼此。 net_kernel
啟動tcp建立穩定的長連線流程,handshake,setnode,set_cookie。- 節點間發訊息使用的資料格式external term format。
- 節點啟動時通過
How to opens an ssh tunnel to connect to a remote Erlang VM via Observer.
觀察節點想啟動observer觀測其它節點,觀察節點只有ssh的網路許可權,其它埠不通,
可以使用把epmd的埠對映ssh代理隧道上,來實現節點通訊。
更進一步,可以研究一下SSHEX如何通過Erlang自帶的ssh庫來實現功能的。How to evaluate a string of code in Erlang at runtime.
Erlang作為動態語言的絕佳優勢就是可以執行時才parse/eval輸入的字串,
這也是Erlang Shell執行的基本原理。大部分人都幻想過在瀏覽器裡面執行來
Erlang Shell,實現控制管理後臺。
比如這個:TryErlang。可以嘗試,但一定要注意如何限制許可權。防止被人hack後直接init:stop/0
Ten Years of Erlang.
Learn You Some Erlang_作者Fred總結了加入Erlang社群10年的變化。附譯文。
Monitoring Erlang Atoms.
原子是不會垃圾回收的,當原子個數達到最大時(預設為1048576),節點會直接crash。
由於舊版的OTP不能直接得到atom數量,所以文中需要間接通過erlang:system_info(info)
來做。
在新版OTP中可以直接使用erlang:system_info(atom_limit)和erlang:system_info(atom_count)
得到最大值和當前值。
$ erl Erlang/OTP 20 [erts-9.0] [source] [64-bit] ... 1> [list_to_atom(integer_to_list(I)) || I <- lists:seq(1, erlang:system_info(atom_limit))]. no more index entries in atom_tab (max=1048576) Crash dump is being written to: erl_crash.dump...done
程式碼
Hexadecimal字元轉二進位制
1> Hexs = ["FF","AC","01"].
2> << <<(list_to_integer(C,16)):8>> || C <- Hexs >>.
<<255,172,1>>