導航:首頁 > IDC知識 > skynet伺服器

skynet伺服器

發布時間:2021-03-14 00:16:44

1、怎麼使用skynet搭建一個伺服器

方法如下: 1.lua-resty-websocket實在太老了,現在已經是lua53的時代了 2.還是喜歡tornado websocket的基於回調的方式,當然我寫的既可使用回調方式,也可使用lua-resty-websocket基於直接recv的方式 其實解析websocket還是比較簡單的,比較復雜點的是websocket 的close操作。和握手一樣,close也是需要客戶端-伺服器端確認的。 當客戶端->close ->服務端,服務端接收到opcode為8的close事件,服務端發送close frame,然後關閉客戶端socket 當服務端->close ->客戶端,伺服器發送close frame,此時客戶端得到close事件,客戶端接著會主動發送close frame給服務端,服務端接收到opcode為8的close事件,關閉客戶端socket。這里需要注意,如果用js 的話,var ws = new WebSocket('XXXX'),在onclose事件中不需要主動調用ws.close(),底層會幫你調用。

2、skynet的lua怎麼換成python

伺服器: simpledb.lua: skynet.register "SIMPLEDB" 向skynet里注冊一個服務 agent.lua: skynet.call("SIMPLEDB", "text", text) 調用相應的服務 main.lua: skynet.newservice("simpledb") 啟動一個服務 以上函數都在\lualib\skynet.lua 文件內

3、skynet 做伺服器則怎麼樣

還是要選長期做伺服器的知名品牌(質量和售後才能真正得到保障),剛好公司也有伺服器需求,稍微有所了解,你可以去看看國內的正睿、浪潮,國外的惠普、戴爾等。

4、終於看明白 skynet的例子是怎麼調用的.mark一下

伺服器:
simpledb.lua: skynet.register "SIMPLEDB" 向skynet里注冊一個服務
agent.lua: skynet.call("SIMPLEDB", "text", text) 調用相應的服務
main.lua: skynet.newservice("simpledb") 啟動一個服務

以上函數都在\lualib\skynet.lua 文件內

5、伺服器端游戲引擎有哪些

現在很多人用的比較多應該都是Matchvs吧,特別是做H5開發的。

6、為什麼skynet不適合在CPU核心較少的機器上跑

我希望我們的游戲伺服器(但 skynet 不僅限於用於游戲伺服器)能夠充分利用多核優勢,將不同的業務放在獨立的執行環境中處理,協同工作。這個執行環境,最早的時候,我期望是利用 OS 的進程,後來發現,如果我們必定採用嵌入式語言,比如 Lua 的話,獨立 OS 進程的意義不太大。Lua State 已經提供了良好的沙盒,隔離不同執行環境。而多線程模式,可以使得狀態共享、數據交換更加高效。而多線程模型的諸多弊端,比如復雜的線程鎖、線程調度問題等,都可以通過減小底層的規模,精簡設計,最終把危害限制在很小的范圍內。這一點,Skynet 最終花了不到 3000 行 C 代碼來實現核心層的代碼,一個稍有經驗的 C 程序員,都可以在短時間理解,做維護工作。

7、客戶端使用socket怎麼連接skynet

方法如下:
1.lua-resty-websocket實在太老了,現在已經是lua53的時代了
2.還是喜歡tornado websocket的基於回調的方式,當然我寫的既可使用回調方式,也可使用lua-resty-websocket
基於直接recv的方式
其實解析websocket還是比較簡單的,比較復雜點的是websocket 的close操作。和握手一樣,close也是需要客戶端-伺服器
端確認的。
當客戶端->close ->服務端,服務端接收到opcode為8的close事件,服務端發送close frame,然後關閉客戶端socket
當服務端->close ->客戶端,伺服器發送close frame,此時客戶端得到close事件,客戶端接著會主動發送close frame給服務端,服務端接收到
opcode為8的close事件,關閉客戶端socket。
這里需要注意,如果用js 的話,var ws = new WebSocket('XXXX'),在onclose事件中不需要主動調用ws.close(),底層會幫你調用。

8、服務端要學什麼、怎麼學?

「伺服器所用到的知識:TCP/UDP,最基本的; 並發——你可以選擇使用select、poll,或者是多線程、多進程:如果你使用多線程,那麼就必須使用同步技術——信號量、互斥體、條件變數的一種或幾種,並且對於多線程技術,你還需要考慮使用進行線程分離與合並; 如果你使用了多進程,那麼同步...」

9、游戲伺服器與普通伺服器有什麼區別

首先,游戲伺服器與普通伺服器相比較來說,游戲伺服器需要能夠保存更多的用戶的狀態。用戶的等級等屬性不用說,一般的IM服務也會有,還有一些時刻變化的數據,比如某個玩家的生命值,發技能前後的法力值等等,這些值區別於一般的屬性值如名字,ID這些,這些數據會經常性的變化,還會參與到邏輯的計算中,比如你一個多少等級的玩家吃了什麼東西之後戰力值變化為多少,打在一個多少屬性的玩家身上會不會被他閃避,會不會產生暴擊…諸如此類的信息,在游戲伺服器中都會一一保存。
其次,游戲伺服器中每一個用戶都是獨立存在的,每一個用戶的數據、請求等都是獨立的,用戶彼此間的數據並沒有任何交互。這也是游戲伺服器與普通伺服器之間最大的區別。至於客戶端之間會有交互這一點,舉最簡單的例子,一個人在一個場景裡面說了一句話,那麼「同一個屏幕」的玩家也需要能夠看到他說的這句話。此時游戲伺服器就需要判斷,多遠的距離以內的玩家,會認定為是"同屏幕"的玩家,需要向這些玩家廣播這個玩家說的這句話。
這個廣播就比較麻煩了。首先,需要計算哪些玩家屬於"同屏幕",就是我們在第一點提到的玩家身上某些經常變化的屬性需要做的運算,在這里需要根據玩家的坐標,找出來跟在同屏幕的玩家,用到的是AOI的概念。另外,找到了這些需要接收這個消息的玩家之後,將消息轉發給它們又是一個IO密集的操作,假如場景中有10個人,那麼一句話就需要同時廣播給另外9個人,假如有100人,1000人呢,數據量就更大了,而且時間的延遲也不能太長,這對於游戲伺服器的性能就要求很高了。所以同樣的一個硬體配置的伺服器,可能跑Nginx可以同時處理上萬的鏈接,但是對於一個游戲伺服器就只有1,2千了,就是因為游戲伺服器是一個CPU密集而且IO密集的伺服器類型。而且不僅需要這樣的游戲伺服器不僅要求性能比較高,還需要伺服器具有極高的穩定性,總不能隔一會就宕機了,那大家還怎麼玩。
此外,游戲伺服器需要更好的數據承載能力和處理能力。而普通伺服器則在各個方面都比較均衡。在尋找游戲伺服器租用商的時候,一定要選擇那種CPU性能非常出色的。
最後一點,游戲行業一直以來是網路攻擊的重災區,很多游戲剛上線沒多久就頻繁遭到攻擊,導致玩家大量流失口碑下降,最後可能導致直接關服。所以游戲伺服器一定要帶高防流量包。

10、GitHub上有哪些不錯的游戲伺服器框架

推薦兩個框架性質的:

雲風的cloudwu/skynet · GitHub

網易的NetEase/pomelo · GitHub

與skynet伺服器相關的知識