iT邦幫忙

鐵人檔案

第 11 屆 iThome 鐵人賽
回列表
Software Development

從讀遊戲原始碼學做連線遊戲 系列

在 2019 年 8 月初的時候剛好有一款停止營運的網頁遊戲公開了原始碼,因為是一款有著即時對戰機制的遊戲因此相對於線上遊戲來說比較不複雜,但是內容豐富程度也不會太過單調。因此就跟朋友開始架設跟營運這款遊戲,既然都要讀原始碼了解這款叫做 Unlight 的遊戲,不如就跟大家分享一下 Unlight 在「連線」機制上的設計,還有實際上要怎麼寫出自己的連線框架。

鐵人鍊成 | 共 33 篇文章 | 49 人訂閱 訂閱系列文 RSS系列文
DAY 11

Day 11 - 指令系統 - 客戶端發送指令(二)

我們已經知道客戶端是如何連上伺服器並將指令發送出去。那麼我們接下來就要來看如何生成指令發送到伺服器上,在討論伺服器部分的時候我們大致上知道指令需要由長度、指令編...

2019-09-25 ‧ 由 蒼時弦也 分享
DAY 12

Day 12 - 指令系統 - Unlight 解析指令的陷阱

現在已經從伺服器跟客戶端了解到了發送跟接收的步驟,不過伺服器的如何發送到客戶端並接和處理收似乎是還沒有討論過。不過因為使用相同的規則解析實際上差異並不大。 雖然...

2019-09-26 ‧ 由 蒼時弦也 分享
DAY 13

Day 13 - 連線的加密 (一)

在前面的文章中我們跳過了一個部分,那就是指令在傳輸時要進行加密的方式。以連線遊戲來說,如果我們將玩家操作的指令明文的暴露出來的話,除了對安全性有部分影響之外,也...

2019-09-27 ‧ 由 蒼時弦也 分享
DAY 14

Day 14 - 連線的加密 (二)

加密連線的方式有很多種,像是使用 HTTP 協定可以透過 HTTPS 之類來加密,運氣不錯的事 SRP 算是容易理解而他的應用也在 OpenSSL 和一些雲端服...

2019-09-28 ‧ 由 蒼時弦也 分享
DAY 15

Day 15 - 連線的加密 (三)

我們已經大概了解 SRP 是怎樣在不傳輸密碼的狀況下讓伺服器跟客戶端驗證對方,不過 Unlight 是怎樣利用產生後的 Session Key 去加密傳輸還看不...

2019-09-29 ‧ 由 蒼時弦也 分享
DAY 16

Day 16 - Singleton 的應用(一)

前面討論了連線遊戲是如何在伺服器跟玩家之間溝通的方法跟行為,不過遊戲跟 Web 和其他應用相比從初期就很快需要面對複雜的狀態問題。也因為這樣遊戲的除錯跟維護相對...

2019-09-30 ‧ 由 蒼時弦也 分享
DAY 17

Day 17 - Singleton 的應用(二)

在開發遊戲時除錯之所以的原因之一是因為要管理的狀態太多了,如果仔細的觀察一個遊戲會發現遊戲就像是一個巨大的狀態機。從玩家所在的關卡畫面、關卡內的 NPC、怪物等...

2019-10-01 ‧ 由 蒼時弦也 分享
DAY 18

Day 18. 實作練習 - 準備與規劃

關於遊戲實作的部分在 Unlight 的原始碼中有太多東西可以參考跟學習,前面半個月的時間我們已經將連線遊戲中最主要的機制了解,透過運用 Socket API...

2019-10-02 ‧ 由 蒼時弦也 分享
DAY 19

Day 19 - 實作練習 - Server 雛形建立

既然已經決定好了 Server 和 Client 的方向,我們就先從伺服器端開始著手製作。至少要先有一個能提供基本操作的雛形,才能夠讓後續客戶端相對容易測試。...

2019-10-03 ‧ 由 蒼時弦也 分享
DAY 20

Day 20 - 實作練習 - WebSocket 伺服器

我們現在已經有一個可以執行的指令,接下來就是要將 Web Server 啟動。在 Ruby 裡面我們可以透過兩種方式將 Rack 打開。 使用 config....

2019-10-04 ‧ 由 蒼時弦也 分享