• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            Fork me on GitHub
            隨筆 - 215  文章 - 13  trackbacks - 0
            <2017年5月>
            30123456
            78910111213
            14151617181920
            21222324252627
            28293031123
            45678910


            專注即時通訊及網游服務端編程
            ------------------------------------
            Openresty 官方模塊
            Openresty 標準模塊(Opm)
            Openresty 三方模塊
            ------------------------------------
            本博收藏大部分文章為轉載,并在文章開頭給出了原文出處,如有再轉,敬請保留相關信息,這是大家對原創作者勞動成果的自覺尊重!!如為您帶來不便,請于本博下留言,謝謝配合。

            常用鏈接

            留言簿(1)

            隨筆分類

            隨筆檔案

            相冊

            Awesome

            Blog

            Book

            GitHub

            Link

            搜索

            •  

            積分與排名

            • 積分 - 215511
            • 排名 - 118

            最新評論

            閱讀排行榜

            http://www.csdn.net/article/2015-10-26/2826038-Erlang
            http://blog.csdn.net/swordfishx82/article/details/45227813

            http://blog.csdn.net/swordfishx82/article/details/45241887
            從網上下載erlang64位,python2.7安裝到電腦上,然后設置環境變量

            ,然后在網上下載傾國傾城的客戶端和服務器端,進入服務器端文件夾,點擊startup.bat


            修改客戶端連接的配置文件

            1. <?xml version="1.0" encoding="UTF-8"?>  
            2. <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">  
            3. <plist version="1.0">  
            4. <dict>  
            5.     <key>1</key>  
            6.     <dict>  
            7.         <key>idx</key>  
            8.         <string>1</string>  
            9.         <key>name</key>  
            10.         <string>一區</string>  
            11.         <key>servers</key>  
            12.         <dict>  
            13.             <key>100</key>  
            14.             <dict>  
            15.                 <key>idx</key>  
            16.                 <string>100</string>  
            17.                 <key>name</key>  
            18.                 <string>簡雨測試服</string>  
            19.                 <key>ip</key>  
            20.                 <string>127.0.0.1</string>  
            21.             </dict>  
            22.             <key>300</key>  
            23.             <dict>  
            24.                 <key>idx</key>  
            25.                 <string>300</string>  
            26.                 <key>name</key>  
            27.                 <string>測試服1</string>  
            28.                 <key>ip</key>  
            29.                 <string>127.0.0.1</string>  
            30.             </dict>  
            31.             <key>400</key>  
            32.             <dict>  
            33.                 <key>idx</key>  
            34.                 <string>400</string>  
            35.                 <key>name</key>  
            36.                 <string>測試服2</string>  
            37.                 <key>ip</key>  
            38.                 <string>127.0.0.1</string>  
            39.             </dict>  
            40.         </dict>  
            41.     </dict>  
            42.     <key>2</key>  
            43.     <dict>  
            44.         <key>idx</key>  
            45.         <string>2</string>  
            46.         <key>name</key>  
            47.         <string>二區</string>  
            48.         <key>servers</key>  
            49.         <dict>  
            50.             <key>200</key>  
            51.             <dict>  
            52.                 <key>idx</key>  
            53.                 <string>200</string>  
            54.                 <key>name</key>  
            55.                 <string>9秒測試服</string>  
            56.                 <key>ip</key>  
            57.                 <string>127.0.0.1</string>  
            58.             </dict>  
            59.             <key>500</key>  
            60.             <dict>  
            61.                 <key>idx</key>  
            62.                 <string>500</string>  
            63.                 <key>name</key>  
            64.                 <string>測試服3</string>  
            65.                 <key>ip</key>  
            66.                 <string>127.0.0.1</string>  
            67.             </dict>  
            68.         </dict>  
            69.     </dict>  
            70. </dict>  
            71. </plist>  
            有vs2010打開客戶端,

            跟正常的cocos2dx編譯方法沒有區別,






            這個游戲的架設方法跟kbe架設難度沒有可比性,不過erlang在國內受歡迎程度可不是一般的,自從神仙道橫行國內頁游市場之后,越來越多的公司注意erlang服務器了,傾國傾城這個游戲雖然客戶端是純c++,不能像lua一樣進行熱更新,不過貴在寫的很完整,值得一看,另外服務器端是一個完整網友的腳本系統,對學習erlang有相當大的幫助,好了就到這。

            這里先占個位置,昨晚的文章不知怎么有更出來了,所以在后面補一段erlang的基本語法吧

            一、Erlang語法:變量、模式匹配
            --------------------------------------
            1.elr命令:工具欄toolbar:start().
            2.%。。。注釋
            3.變量首字母大寫,單一賦值
            4.模式匹配
            5.原子:hello, 'an atom with'
            6.元組tuple:元組嵌套{person,{a,1},{b,2}}
                         提取元組字段值Point = {point, 10, 45}  {point, X, Y} = Point
            7.列表list:  定義列表ThingsToBuy1 = [{oranges,4}, {newspaper,1}|{ThingsToBuy}]
                         提取元素[Buy1|ThingsToBuy2] = ThingsToBuy1.
            8.字符串:"hello"
            9.q()退出
            10.f()釋放變量


            二、Erlang語法:函數(面向函數編程:函數可以作為參數,也可以作為返回值,可以使用列表解析、斷言、case/if、二進制、比特位、進制、ASCII碼)
            --------------------------------------
            1.函數
              編譯:c(geometry)
              運行:geometry:area({rectangle, 10, 5}).
            2.匿名函數:Double = fun(X) -> 2*X end.
                     Double(2).
              Hypot = fun(X, Y) -> math:sqrt(X*X+Y*Y) end.
              TempConvert = fun({c,C}) -> {f, 32+C*9/5};
                               ({f,F}) -> {c, (F-32)*5/9}
                 end.
            3.fun作為函數參數
              映射:lists:map(Double, [1,2,3,4]).
                  返回[2,4,6,8].
              過濾:lists:filter(Even, [1,2,3,4]).
                  Even = fun(X) -> (X rem 2) =:= 0 end.
            4.返回fun的函數
              Fruit = [apple,pear,orange].
              MakeTest = fun(L) -> (fun(X) -> lists:member(X,L) end) end.
              IsFruit = MakeTest(Fruit).
              即:IsFruit = fun(X) -> lists:member(X,[apple,pear,orange]) end.
            5.循環
              for(Max,Max,F) -> [F(Max)];
              for(I,Max,F)   -> [F(I)|for(I+1,Max,F)]
            6.列表解析
              [2*X || X <- L].
              定義:Buy = [{oranges,4},{newspaper,1},{apples,10},{pears,6},{milk,3}].
              乘積:[shop:cost(A)*B || {A,B} <- Buy]
              求和:libs:sum([shop:cost(A)*B || {A,B} <- Buy]).
              (1)快速排序:L=[12,6,2,13,2,8,9,10]. qsort(L).
              (2)畢達哥拉斯三元組:libs:pythag(16).
              (3)變位詞:libs:perms("123").
                        ["123","132","213","231","312","321"]
            7.算術表達式
            8.斷言:
              max(X,Y) when X > Y -> X;
              max(X,Y) -> Y.
              斷言函數:
              f(X,Y) when is_integer(X), X > Y, Y < 6 -> X;
            9.記錄:record
            10.case表達式:
              filter(P, [P|T]) ->
                  case P(H) of
                      true -> [H|filter(P,T}];
               false ->filter(P,T)
                   end;
              filter(P, []) -> [].
            11.if表達式:
            12.內建函數BIF
              元組轉換為列表:tuple_to_list({12,cat,"Hello"}).
              系統時間:time()
            13.二進制數據:<<5,10,20>>,<<"hello">>
              操縱:list_to_binary()
                    term_to_binary()
             binary_to_term()
             size()
            14.比特語法:<>
              file:read_file("")
            15.動態調用:apply(libs, sum, [1,2,3,4]).
            16.模塊定義:-module(modname).
              引入:-import(modname, [fun/1]). 可以不寫模塊名直接引用函數名
              導出:-export([name1/1, name2/2]).
              編譯屬性:-compile(options).
              模塊版本:-vsn(Version).
              用戶定義屬性:-SomeTag(Value).
              輸出屬性:attr:module_info().
                        attr:module_info(attributes).
              引用函數:fun Mod:RemoteFunc/Arity
              包含文件:-include(Filename).
                       -include_lib(Name).
              列表操作符:[1,2,3]++[4,5,6]
                          [1,2,3]--[2,3]
              進制:K#123
              $語法:$C 表示ASCII
              字典:erase(), put(x, 20),get(x), erase(x)
              短路表達式:Epr1 orelse Epr2.  Epr1 andalse Epr2.


            三、Erlang語法:編譯運行
            --------------------------------------
            1.退出:halt().導致數據庫要恢復  q().安全退出,等價于init:stop().
            2.取得加載路徑:code:get_path().
              取得主目錄:init:get_argument(home).
            3.外部運行:D:/erl>erl.exe -noshell -s hello start -s init stop
            4.幫助:help().


            四、Erlang語法:并發(進程類似于人:通過消息進行溝通,也可以廣播;沒有共享內存,因此不需要鎖;某一個死掉,會通知鏈接進程)
            --------------------------------------
            1.創建進程:Pid = spawn(Fun)
              spawn(Mod, FuncName, Args).
            2.發送消息:Pid!Message
              群發消息:Pid1!Pid2!Pid3...!Pidn!Message
              接收消息:receive ... end.
              例如:Pid = spawn(fun area_server0:loop/0).
                    Pid!{rectangle, 6, 10}.
            3.自身ID:self().
              Pid!{self(), Message}.
              例如:Pid = spawn(fun area_server1:loop/0).
                   area_server1:rpc(Pid, {rectangle, 6, 10}).
            4.設置進程數:D:/erl>erl +P 500000
              測試啟動時間:process:max(400000).
            5.注冊進程:register(AnAtom, Pid).  注冊進程別名
                        unregister(AnAtom).   溢出注冊進程
                 whereis(AnAtom) -> Pid | undefined 判斷是否注冊
                 registered() -> [AnAtom::atom()] 取得所有注冊進程
              例如注冊時鐘:clock:start(5000, fun() -> io:format("TICK ~p~n", [erlang:now()]) end).
                  停止時鐘:clock:stop().
            6.并發錯誤:鏈接進程


            五、Erlang語法:分布式
            --------------------------------------
            1.單節點測試
            啟動服務器:kvs.start().
            存儲: kvs:store({location, joe}, "Stockholm").
             kvs:store(weather, raining).
            查找: kvs:lookup(weather).
             kvs:lookup({location, joe}).
            2.雙節點測試
            啟動服務器節點:
             D:/erl>erl -sname gandalf
             Eshell V5.7  (abort with ^G)
             (gandalf@zhongbingliu)1> kvs:start().
             true
             (gandalf@zhongbingliu)2>

            調用者節點:
             D:/erl>erl -sname bilbo
             Eshell V5.7  (abort with ^G)
             (bilbo@zhongbingliu)1> rpc:call(gandalf@zhongbingliu, kvs, store, [weather, fine]).
             true
             (bilbo@zhongbingliu)2> rpc:call(gandalf@zhongbingliu, kvs, lookup, [weather]).
             {ok,fine}
            3.客戶機和服務器位于同一局域網的不同機器上
            4.客戶機和服務器位于因特網的不同機器上:確保4396端口通信正常,epmd會使用這個端口


            六、Erlang語法:文件
            --------------------------------------
            1.讀取文件:file:consult("data1.data").
            2.讀取一項:{ok, S} = file:open("data1.data", read). //打開
                io:read(S, ''). //讀取一項
                io:get_line(S, ''). //讀取一行
                file:close(S). //關閉
            3.查找代碼庫位置:code:which(file).
                d:/erl5.7/lib/kernel-2.13/ebin/file.beam
            4.讀取二進制數據:
                file:read_file("data1.data"). //全部讀到內存
                {ok, S} = file:open("data1.data", [read,binary,raw]). //打開
                file:pread(S, 22, 46). //隨機讀取
            5.查找文件:lib_find:files
            6.寫入文件:{ok, S} = file:open("data2.data", write). //打開
                io:format(S, "~s~n", ["Hello readers"]). //寫入
                file:close(S). //關閉
            7.隨機寫入:
                {ok, S} = file:open("data3.data", [raw,write,binary]). //打開
                file:pwrite(S, 10, <<"new">>). //隨機寫入
            8.目錄操作:file:list_dir("/"). //文件列表
                 file:make_dir("abc"). //創建目錄
                 file:del_dir("abc"). //刪除目錄
            9.文件屬性:file:read_file_info("data1.data").
            10.文件操作:file:copy("data1,data", "/"). //拷貝
                        file:delete("data1"). //刪除


            七、Erlang語法:套接字
            --------------------------------------
            1.Socket連接www:socket:nano_get_url().
            2.啟動服務器:server:start_nano_server().
            3.編寫客戶端:client:nano_client_eval("list_to_tuple([2+3*4,10+20])").
            主動型:非阻塞 服務器接收消息的速度必須快于客戶端發送的速度,否則服務器會因為消息緩沖區塞滿被消息淹沒
            被動型:阻塞
            混合型:半阻塞


            八、Erlang語法:數據庫
            --------------------------------------
            1.ETS是內存存儲,速度快
            2.DETS是磁盤存儲,可備份
            3.創建表:ets:new
             dets:open_file
            4.插入:insert(table, X)
            5.查找:lookup(table, Key)
            6.釋放:dets:close(tableid) etd:delete(tableid)
            7.Mnesia數據庫:
              創建表:-record...
              選取所有數據:do(qlc())...
              選取部分列:
              按條件選取:
              關連查詢:
              增加數據:mnesia:write()
              刪除數據:mnesia:delete()
              事務管理:mnesia:transaction(F)
              取消事務:mnesia:abort()
              啟動表查看器:tv:start().


            九、Erlang語法:OTP
            --------------------------------------
            1.支持事務:使用異常捕捉進行回滾
            2.支持熱代碼替換
            3.錯誤日志
            4.警報管理
            5.應用程序監視器:appmon:start().


            十、Erlang語法:JInterface
            --------------------------------------
            OptNode 節點,監聽端口 能夠啟動多個服務節點,如gurka@sallad.com
            Epmd 
            OptMbox 默認啟動一個郵箱 收發郵件
            Link 監控遠程是否斷掉

            posted on 2017-01-10 22:55 思月行云 閱讀(419) 評論(0)  編輯 收藏 引用 所屬分類: Erlang
            久久亚洲私人国产精品| 久久国产精品久久精品国产| 91精品国产高清久久久久久国产嫩草 | 久久综合色之久久综合| 99久久99久久精品免费看蜜桃 | 久久涩综合| 国产精品xxxx国产喷水亚洲国产精品无码久久一区 | 精品久久久久久亚洲| 亚洲乱码中文字幕久久孕妇黑人| 久久无码一区二区三区少妇| 麻豆精品久久久一区二区| 久久久久人妻一区精品性色av| av无码久久久久久不卡网站| 久久亚洲精品成人av无码网站| 人妻精品久久久久中文字幕一冢本| 无码人妻久久一区二区三区免费| 亚洲日本va中文字幕久久| 久久亚洲精品成人无码网站 | 伊人色综合久久天天人手人婷 | 亚洲а∨天堂久久精品9966| 久久婷婷五月综合97色直播| 久久伊人亚洲AV无码网站| 亚洲一区精品伊人久久伊人| 亚洲精品国产第一综合99久久| 麻豆一区二区99久久久久| 久久Av无码精品人妻系列| 波多野结衣中文字幕久久| 国产精品一久久香蕉国产线看观看 | 亚洲精品无码久久一线| 激情伊人五月天久久综合| 国产成人精品免费久久久久| 国产精品99久久精品爆乳| 天堂无码久久综合东京热| 国内精品久久久久久久久电影网 | 人妻无码αv中文字幕久久琪琪布 人妻无码精品久久亚瑟影视 | 久久综合伊人77777| 青草久久久国产线免观| 久久偷看各类wc女厕嘘嘘| 国产精品xxxx国产喷水亚洲国产精品无码久久一区 | 国产99久久九九精品无码| 日韩影院久久|