iT邦幫忙

DAY 30
3

蠻可愛的 Erlang 與 Elixir系列 第 30

開放電信平台OTP 介紹

  • 分享至 

  • xImage
  •  

概說

在前面的Erlang與Elixir的介紹裡面,已經有關於process的運作,
以及process之間的互動.也對BEAM及porcess有一定的了解.

Erlang是電信公司發展出來的,強調的是高可靠度以及強大的連線能力.
在發展的過程中,發展出了OTP架構.可以很方便的建立穩定快速的Server.
只要依照OTP架構,無須自己從新打造輪子了.

來看一下簡單的例子吧.

建立專案工作目錄

首先建立一個專案工作目錄.使用 mix 公用程式.

mix new sequence
* creating README.md
* creating .gitignore
* creating mix.exs
* creating config
* creating config/config.exs
* creating lib
* creating lib/sequence.ex
* creating test
* creating test/test_helper.exs
* creating test/sequence_test.exs

這樣就透過 mix 建立一個 sequence 的工作目錄,還有底下的子目錄與檔案.
在lib目錄下,建立一個server.ex 內容如下:

defmodule Sequence.Server do
  use GenServer

  def handle_call(:next_number, _from, current_number) do
    {:reply, current_number, current_number+1}
  end
end

解說:

use GenServer, 引用OTP裡的GenServer,通用伺服器.
def handle_call,定義其中一個callback 函數.
目前只需要先使用這個.

接著在終端機,切換目錄到 sequence,也就是剛剛建立的專案工作目錄.

輸入 iex -S mix
接著會產生

Erlang/OTP 17 [erts-6.2] [source-5c974be] [64-bit] [smp:4:4] [async-threads:10] [hipe] [kernel-poll:false]

Compiled lib/sequence.ex
Compiled lib/server.ex
Generated sequence.app
Interactive Elixir (1.0.2) - press Ctrl+C to exit (type h() ENTER for help)
iex(1)> 

這樣就編譯好專案了.

接著啟動GenServer.

iex(1)> {:ok, pid} = GenServer.start_link(Sequence.Server, 100)
{:ok, #PID<0.95.0>}

iex(2)> GenServer.call(pid, :next_number)
100
iex(3)> GenServer.call(pid, :next_number)
101

使用GenServer.Call 呼叫,可以看到Server使用handle_call回應.

上面的程式,很簡單,只要寫好callback function.產生process等等細節,都隱藏起來了.

結語

三十天的Erlang / Elixir 終於來到尾聲.也許你曾經聽過Erlang,或是有聽到一些評語
說語法怪異等等.函數式程式語言其實也只是一種方式,習慣就好.
重要的是透過了解,而避免誤會.尤其是 Elixir的出現,在剛介紹時是1.0.1版,現在已經是
1.0.2版了,雖然還在發展,但是可以看到他帶來的一些便利性,作為一個中介,是很好的一個
切入點.讓我們可以建立高可靠,高併發,延展性好的系統.這在現在的網路時代,越來越重要了.
除了有很好的點子,也開發出很不錯的系統,但是隨著業務量大增,

後端的服務怎樣延展也很重要.現在有些新興的語言,都很不錯.Erlang雖然不新,但是已經
證明了他的威力及穩定性,搭配Elixir這個魔法靈藥,相信在未來能夠給大家一些新的感受!


上一篇
Elixir 的 Concurrency
系列文
蠻可愛的 Erlang 與 Elixir30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言