1.skynet pomelo(node.js) elixir(erlang) 週末研究總結 手遊這兩年發展來看,感受對實時性要求愈來愈高,有同事在研究Elixir開發,google得知這東西是基於erlang搞出來的,語法相似ruby; 公司如今客戶端採用全cocos2d + c++ + lua,新項目unity3d + c# + lua, lua在產品開發中使用比較頻繁,同事瞭解程度也比較深; 完美狀況下天然最好是服務端也使用lua開發,以前就常常發生在服務端ruby代碼中寫lua的囧像。 週末花了兩天時間作了下研究,關於高性能服務器架構的知識;無非就是高性能io處理,多進程多線程模型,透明化分佈式,腳本熱更新 etc 這些東西; 關於io處理 epoll和windows的iocp,對比select模型,效率對比就是輪詢一堆端口:o(n)跟直接註冊回調:o(1)的差異; pomelo: 內部使用websocket或者socket.io的實現,內部也是使用epoll實現 skynet: 一樣使用epoll/kqueue實現,代碼在socket_epoll.c socket_kqueue.c erlang:同skynet 聽說erlang 處理1百萬個空tcp連接很輕鬆,這塊幾個研究對象區別不是特別大; 關於進程線程 pomelo:單進程單線程模型,具體緣由是node.js的實現就是這樣的; skynet: 多進程多線程模型; erlang: 單進程多線程模型; pomelo進程之間通訊是經過socket完成(包括同機),每一個進程中都有一個消息循環,rpc都是異步完成,可見效率通常; skynet是單進程內預製n個線程,每一個服務有本身的消息循環,沒消息的時候掛起,有消息的時候,選擇一個線程來跑服務,消息隊列的消息投 遞使用原子鎖;處於同進程內的服務間,消息通訊效率仍是比較高的,消息能夠拷貝也能夠不拷貝,建議拷貝; erlang封裝了本身的進程概念,實際上相似skynet(實際上是skynet借鑑了erlang vm),每一個進程對應的是操做系統線程, 綜上,erlang的設計很好,因此skynet也借鑑了設計,可是介於lua開發的方便性,我的更傾向於skynet; 關於透明化cluster: 這點作的最好的是erlang,由於它在語言層面上就不須要關心物理機器,進程這些東西;skynet在這方面跟pomelo差很少,仍是須要關心物 理機; 關於熱更新 erlang和skynet都是能夠實現熱更新,pomelo新版本中能實現某些邏輯關係不復雜的模塊熱更新; 其餘:lua的coroutine的方便之處,在異步的操做過程當中,通常作法就是調用-》回調-》調用-》回調…,這種嵌套的調用代碼書寫很麻煩,使用協程能夠方便的在一個函數內實現異步調用,掛起等待結果回調的同步效果;