深入淺出SagaECO RPC篇(五) “揚帆啟程”

以下討論基於SagaECO svn ~400版本

源代碼可以從這裡下載

RPC篇終於來到第五篇… 上回提要是每當與伺服器連接時首要的鑰匙交換事項,換言之通信確立後馬上開始通信(傳送門)。

這次介紹登入的詳細步驟,手把手完成最基礎的登入ECO的過程。跟上一章同樣,登入的步驟是由癌炮指定的,跟SagaECO沒有關聯咯。

懶人包

仔細看很多重覆的流程,無非是檢查版本->登入->做其他事的模式。這裡使用了SagaECO的命名方式。Gate Server的角色很簡單,就是用來做用戶認證,引導到用戶選擇遊戲伺服器的列表裡(C, L ,F , Z服)。

好像盤古開初的時候沒有這個Gate Server。從server.lst可以看出,本來就是讓玩家自己選遊戲伺服器。server.lst中加一行就能在登入畫面選伺服器。可能是後來意識到server.lst裡直接寫IP,容易被DDOS,於是把第一重登入交給Gate Server去做; 或者是Login Server負載大而需要多幾台伺服器,擔當負載平衡(分流)作用。後者推測比較合理,因為這種沒有代理作用的負載平衡器不見得能避免直接去DDOS後面的伺服器。

當伺服器列表交出去之後 Gate Server就甚麼都不做只會來回ping。順帶一提只有一台伺服器的話客戶端不會跳出選擇伺服器的選單,沒有選擇之下會自動選擇。002F這個封包是更後來才加上去的,貌似是如果無法獲取伺服器列表會重試。如果你有途徑入手SagaECO SVN1063,只需要添加002F和0030兩個封包就能兼容最新506客戶端

透過0033封包客戶端獲得Login Server的資料,再進行一次確立連線,再登入一次,這次Login Server提供角色資料進入選角畫面。00A7和00A8都要發出去否則一直黑屏,全角色都是空的話客戶端自動跳到創角畫面。

選角後向伺服器查詢角色ID,然後拿著角色ID再詢問Map Server在哪裡。ECO採用的是地圖分流機制,一個Map Server對應多張地圖,同一地圖內不設分流。

遊戲的絕大部分功能全依靠Map Server,畢竟連接到Gate Server是4服的總和,全服內連接到Login Server,擴展性集中在交互多的Map Server上。日服Map Server似乎是城市會獨立一台伺服器。過圖時會再次詢問Login Server,如果伺服器不變就不用再去跟Map Server重新連接。

詢問Map Server地址後遊戲進入黑屏,直至自身角色資料初始化完成才會進入過圖畫面,和Map Server確立連線後再不能透過右上角的”X”號直接閞閉遊戲,改為顯示登出選單。與別不同的是登入相關的封包在Map Server的編號不同,以及登入結果多出了伺服器時間截記來同步伺服器時間等細節。

Map Server封包編號大部分不和Login Server重疊,卻有小部分重疊。例如, Gate Server的0032是詢問各Login Server地址,Login Server的0032是詢問Map Server地址,Map Server的0032卻是ping。我認為並非巧合。考慮到開發迭代順序,推測是MapServer以前是唯一的伺服器,其後因要在不同地圖做負載平衡,最後形成穩定的由三組伺服器組成的基礎建設。

伺服器基礎構成

在SagaECO中,Gate Server、Login Server、Map Server皆是獨立運行的程序,意味著可以分三台機上面跑。不過,SagaECO系統受限於一組Login Server和一組Map Server,沒有像原廠一樣有負載平衡的功能。文章頂部提供的SagaECO約SVN 400版本源代碼沒有Gate Server,以及很早期的ecore封包紀錄沒有Gate Server,亦印證了早期沒有Gate Server的說法。

同時,Login Server也無從感知Map Server的狀況,無論如何都把玩家分發到同一個設定好的Map Server。SagaECO後來的版本加上了跨伺服器溝通,這裡不討論的主因是作用不大,再者令人混亂。

至於原廠的實際運作如何是無從考究的。正因為真相無從考究才有自由發揮的空間。封包是一套約定,只要按照約定,伺服器使用的編程語言、架構、組織等一概不受約束,運用接口是軟件工程的精髓。要驅動同一個客戶端進行遊戲,背後有無限可能。只要符合既定的遊戲邏輯,不必拘泥於是不是原廠的伺服器。有見及此,我決定把RPC篇寫在最前作為ECO私服的基礎。

RPC篇著眼於”客戶端如何與伺服器溝通”,有鑑於初次書寫心得,自己也感覺到內容離散且跳躍過快,以一圖流作結。

腦震盪圖

後記: 最近看到來自ECO界和其他遊戲的網上留言

ふとした瞬間にECOを思い出す。また1日だけでいいからみんなと遊びたい — 2020-01-30 (木) 04:08:17

偶然想起了ECO。哪怕只有一天也好,想跟大家一起玩

eco wiki acronia

想不到拖了这么久。

我对星杯一直挺矛盾的,星杯远不能说是我的梦想,因为它不是我的游戏,从一开始,Codify就摆明了我们只是把星杯变成了code(老把codify敲错的人,看清楚!),这是我的心魔。但星杯确实带给我很多快乐,不管是游戏上的还是代码层的(没错,写有意思的代码就是会像嗑药),也认识了很多有意思的人,这是我的动力。Codify就是这样在二者的拉扯中,断断续续地走过了三年多,也真是想不到

(略)…

老实说,我很讨厌一逸不作为的态度。看着Codify最后一次更新已是一年前的我,想起海猫里的一句话,“看推理小说就像恋爱前的暧昧,如果大家都等着对面捅破那层纸的话,就永远没有进展”(读者必须先相信作者会在一连串的不可能之中捋出一个合理的答案,这样这场交流才能继续。不过龙骑士最后还是把结局卖了)。

(略)…

如果一定要有人先行动的话,我先动又何妨?反正也不是第一次。于是,诚如水叔所说,我打算把Codify的源码开放。Codify经历了三个阶段, (略)… 三次对应三波人,铁打的图叔流水的大爷(当然也有常青的羊)。然后其实第一阶段老早就挂在github上了,所以所有问过我拿代码说要研究的人,你们都没有翻过Codify给你总结好的历程,没用心留意过这个项目,我也不觉得你们拿了代码会有第四分钟的热度。这次开源也是说在前头,收藏代码毫无意义。

(略)…

每个人都在等一个契机,但不是每一个契机都能变成一个奇迹那这次能成嘛?三年前我不知道,现在依然不知道。

但诸君,我还想一战。

图叔

我畢竟只是一個普通人,能走到多遠不知道,只好一步步的走。

最後的最後是碎碎念

要去经历大多数人经历不到的 (略…)
要写文章就要写没有人写过的 (略…)
技术和知识完全是可以变现的。

某位大神
9

One Response to “深入淺出SagaECO RPC篇(五) “揚帆啟程”

  • 請問up主,留有ecore和se-a的封包紀錄嗎,看完你的文章後很想要自己動手試試看,但是網站se-a進不去了 也找不到ecore的2013版本,要是能提供的話真的非常感謝

Leave a Reply

Your email address will not be published. Required fields are marked *