or
or
By clicking below, you agree to our terms of service.
New to HackMD? Sign up
Syntax | Example | Reference | |
---|---|---|---|
# Header | Header | 基本排版 | |
- Unordered List |
|
||
1. Ordered List |
|
||
- [ ] Todo List |
|
||
> Blockquote | Blockquote |
||
**Bold font** | Bold font | ||
*Italics font* | Italics font | ||
~~Strikethrough~~ | |||
19^th^ | 19th | ||
H~2~O | H2O | ||
++Inserted text++ | Inserted text | ||
==Marked text== | Marked text | ||
[link text](https:// "title") | Link | ||
 | Image | ||
`Code` | Code |
在筆記中貼入程式碼 | |
```javascript var i = 0; ``` |
|
||
:smile: | ![]() |
Emoji list | |
{%youtube youtube_id %} | Externals | ||
$L^aT_eX$ | LaTeX | ||
:::info This is a alert area. ::: |
This is a alert area. |
On a scale of 0-10, how likely is it that you would recommend HackMD to your friends, family or business associates?
Please give us some advice and help us improve HackMD.
Syncing
xxxxxxxxxx
來做一個日系卡牌手遊吧! - 蒼時弦也
歡迎來到 https://hackmd.io/c/COSCUP2018 共筆
- The image file may be corrupted
- The server hosting the image is unavailable
- The image path is incorrect
- The image format is not supported
Learn More →點擊本頁上方的 開始用 Markdown 一起寫筆記!
手機版請點選上方 按鈕展開議程列表。
工商時間 每周二晚上 ruby默默會
https://www.facebook.com/rubymokumokukai/
五倍紅寶石台北出礦坑 / 台北市衡陽路 7 號 5 樓
起源
接到做手遊的case
網路上其實找不到手遊的source
先不討論連線遊戲,只討論卡牌手遊
今天想討論
手遊伺服器
會斷線和不會斷線
手遊是非長連線類型,送完狀態就斷線
不會斷線就是socket之類的
http協議
通常只有登入會用tcp
登入後就會用udp廣播
所以很容易瞬移
想長連線可能會用websocket轉長連線,但他還是有效能問題
手遊Server 先暫定為 使用 WebServer
可能的選項
要考慮的問題:針對5人以下小團隊,人少能不能handle?
RoR
怪物彈珠就是用RoR做的
不用擔心Server負擔重 負擔重的都不是在Server上
RoR在台灣
要選什麼語言或框架
人力資源
遊戲性質
部署方式
依照團隊狀況選擇適合的方案
OAuth2
搞不好以前手遊都沒做 Https 所以都是裸奔狀態
或是用雲端服務
AWS是因為是贊助商得提一下(笑)
Firebase聽說後台找不到匯出…
Firebase小心收費問題
API設計
例如有個任務列表 要開始遊戲
按下開始遊戲後,回傳一個開始成功,遊戲才觸發換場景 切換到對話,真正輸出對話,傳下一句話,才真正顯示對話
設計API要注意確保沒有狀態
中間人攻擊
客戶端
發送資料← → 回傳資料
伺服器
雲端服務基本上都能協助配置SSL
OAuth2
有現成的套件
都用doorkeeper解決
登入安全性
要使用HSM加密
Hardware Security Module 大部分手機都支援
在玩家手機上產生密鑰或指紋
把Token做AES加密塞進去
Oauth Refresh Token
驗證Token也要認Device ID
RESTful API
採 動作/資源 的思考模式
實作好懂
統一
JSON
客戶端資料庫
SQLite蠻好用的
建議用SQLCipher加密
多語系可處理
平常只傳PKey
AssetBundle
把圖檔跟主程式拆出來單獨下載
遊戲更新可能是Zip包含文本跟圖檔
伺服器要實作Bundle API
App store或GooglePlay可能有時間差
手遊大多數都是增加功能,所以 包 zip應該可以
抽卡機制
假設總卡片1000張,每抽掉一張就減少一張 很簡單的設定機率演算法
PickUp卡池的做法
3%變6%怎麼解?
會把PickUp卡分出來 先抽是哪一堆 再抽卡
PickUp卡池 和 普通卡池 分出來
有可能你抽到稀有卡池,但還是普通卡
Demo
回去會把Source Code放出來
測試
如何部署
機房 vs VPS vs 雲端
機房
VPS
VPS比較
Digital Ocean 功能多 CPU相對差
Linode 老牌服務商 基本上只有純VPS
雲端
雲端
Azure 大部分服務比較貴
GCP 台灣為主的服務,痛點是要習慣Google的玩法,在GCP是沒辦法透過區網連線的,有一些東西違反你的理解
AWS 大部分安定 很多人用但也有實驗性服務要有踩雷的決心 只用EC2算安全
如果某些服務不會傭就不要用
EC2/ELC幾乎都很穩跟好用
如果不會裝環境 可以考慮Heroku or Firebase
Firebase幾乎整合到好,但是脫離不好用
NoSQL表面上看起來很好用 但坑很多
因為Unity,遊戲圈都會整合Firebase
沒有key沒辦法搜尋好友
建置環境
或用AWS的OpsWork工具直接生成
伺服器用預設值可接受
資料庫建議照機器規格用設定檔產生器提整過
AWS RDS之類的服務也是一種方式
有預算用Aurora 是AWS優化過的版本
防火牆如果有ufw可以直接用(否則萬一設定IP tables不小心把自己擋在門外就再也進不去了)
雲端服務就是VPC
缺點是VPC目前版本小複雜 要讀文件
如何拓展
Cache
將不常變動的資料快取 文字腳本
同時寫入資料庫跟快取 讀取時先讀快取
LoadBalance
加機器
DatabaseSharding
透過將使用者切到不同資料庫伺服器減少壓力
使用演算法影響切分的效果
可以用雲端服務稱一陣子 (EX:AWS Aurora
通常需要應用成的實驗
SOA
Service-Oriented Architecture
從會員系統開始拆
缺點是會有延遲
手遊比較不用拆
MMOrpg可能就要開 地圖 戰鬥 之類的
大部分是DB瓶頸先出現
後來是Web瓶頸
之後是跨國所以裝CloudFront
有活動爆人數就加AutoScale
公司規定
企劃不能連資料庫
但每個企劃都有DB Client
原廠維運功劇
Insert into 忘記加where
規定不能下sql
機器人
來自112的同學不要在\w+送中文好嗎
伺服器500 依舊努力重試,結果CPU從20% > 50%
驗證碼追加之後少了200萬機器人
驗證碼公司擔心他們會被打爆
Github可以找到各種線上遊戲的開源(X) 實作版
可以找到tcp之類的長連線遊戲
Unity不太能做連線遊戲 要自己搞定
總結
考慮團隊狀況
沒有規定不能混合使用,例如AWS當Server 資料送GCP分析
或RoR ActionCable效能不理想 改用Golang AnyCable
沒有最佳解 只有最適合的方案
如果時間是問題 花錢也是一種解法
tags:
COSCUP2018
ruby