Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Speaker Deck
PRO
Sign in
Sign up for free
2019 - COSCUP - 復活一個 Browser Game - Unlight 開源事件
蒼時弦や
August 18, 2019
Programming
1
420
2019 - COSCUP - 復活一個 Browser Game - Unlight 開源事件
蒼時弦や
August 18, 2019
Tweet
Share
More Decks by 蒼時弦や
See All by 蒼時弦や
2022 - 默默會 - 重新學習 MVC 的 Model
elct9620
1
240
MOPCON 2022 - 從 Domain-Driven Design 看網站開發框架隱藏
elct9620
0
280
2022 - COSCUP - 我想慢慢寫程式該怎麼辦?
elct9620
0
120
2022 - COSCUP - 打造高速 Ruby 專案開發流程
elct9620
0
150
2021 - RubyKaigi - It is time to build your mruby VM on the microcontroller?
elct9620
0
52
2021 - TGDF - Unlight 從 TCP 到 WebSocket 的 HTML5 之路
elct9620
0
110
2020 - MOPCON - 拿到錘子的我想在為控制器上實作 Ruby VM
elct9620
0
66
2020 - COSCUP - 你這段 Ruby Code 超速摟,已經沒有人看得懂了!
elct9620
0
77
2019 - PVE 社群 - Rails 串接 Proxmox VE API 自動化教學用虛擬機分配
elct9620
1
540
Other Decks in Programming
See All in Programming
xarray-Datatree: Hierarchical Data Structures for Multi-Model Science
tomnicholas
0
210
TokyoR#103_DataProcessing
kilometer
0
520
レガシーフレームワークからの移行
ug
0
110
量子コンピュータ時代のプログラミングセミナー / 20221222_Amplify_seminar _route_optimization
fixstars
0
240
Swift Observation
shiz
3
270
爆速の日経電子版開発の今
shinyaigeek
1
530
AWSとCPUのムフフな関係
cmdemura
0
460
OIDC仕様に準拠した Makuake ID連携基盤構築の裏側
ymtdzzz
0
390
OSSから学んだPR Descriptionの書き方
fugakkbn
4
130
はてなリモートインターンシップ2022 Web API 講義資料
hatena
0
150
コンピュータビジョンセミナー2 / computer_vision_seminar_libSGM
fixstars
0
310
Remix + Cloudflare Pages + D1 で ポケモン SV のレンタルチームを検索できるアプリを作ってみた
kuroppe1819
4
1.3k
Featured
See All Featured
Designing for humans not robots
tammielis
245
24k
jQuery: Nuts, Bolts and Bling
dougneiner
57
6.6k
Ruby is Unlike a Banana
tanoku
93
9.5k
Building Flexible Design Systems
yeseniaperezcruz
314
35k
Build your cross-platform service in a week with App Engine
jlugia
221
17k
Rails Girls Zürich Keynote
gr2m
87
12k
Navigating Team Friction
lara
176
12k
Art Directing for the Web. Five minutes with CSS Template Areas
malarkey
196
9.8k
Imperfection Machines: The Place of Print at Facebook
scottboms
254
12k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
44
14k
What’s in a name? Adding method to the madness
productmarketing
12
1.9k
Designing for Performance
lara
600
65k
Transcript
Revive a Browser Game Server The Open Unlight Project Photo
by Artem Labunsky on Unsplash
WEB DEVELOPER GAME DEVELOPER ࣌ ݭ @elct9620
None
None
Ruby + ActionScript 3
None
Adobe Flash IDE is unavailable!
mxmlc src/Unlight.mxml
Unlight can be compiled by Flex SDK 3.x
Failed because missing files
None
Setup environment takes much time
The source code always become dirty
None
•Always reset client compile environment •Patches / Rework •Customizable Server/Client
•Adjustable Docker compose configure
None
Secure Remote Password not matched!
None
http://srp.stanford.edu/design.html
http://srp.stanford.edu/design.html Step 1. Client create PublicKey A
http://srp.stanford.edu/design.html Step 2. Server create PublicKey B and send it
with Salt to user
http://srp.stanford.edu/design.html Step 3~. Compute SessionKey and verify other's Matcher
None
None
None
None
None
None
None
None
None
None
(/‵Д′)/~ ╧╧
None
None
24 Core CPU 24G RAM 98K IOPS SSD 300M/100M FTTH
Sponsor by Poka
Feel "LAG" after 500 online players
None
None
(0.214518s) SELECT * FROM `card_inventories` WHERE ( `card_inventories`. `chara_card_deck_id` =
2971)
src/model/card_inventory.rb
None
ALTER TABLE card_inventories ADD INDEX chara_card_deck_id (chara_card_deck_id)
None
About 100x faster
None
About 1000 online players without "LAG"
•Adjust Cpuset to fix database on specify cores •Adjust Swappiness
to prevent use disk •Adjust Full Table Index to cache small table
•Move Database outside Docker •Enable SR-IOV to use physics network
card •Add partition to database
Estimate capability > 3000 online players
•DAU about 500 online players •Rows grow fast Only two
weeks we have 10M ~ 20M rows •1 Developer 1 DevOps 1 Player Support
But how to hosting this game?
Add CloudWatch to analytic online players
Open Unlight's Reword/Customize
None
None
Open Unlight's Allow add customize gems
Tricks to allow Docker add optional files
customize/server/src/authentication.rb
customize/server/src/payment.ru
None
Use Rack to implement API server
None
Extend CLI to serve in docker
None
None
Hosting a game have to support players resolve problems
SmartLook can replay player session to debug
ZenDesk can help players in one central system
•ZenDesk - Player support •SmartLook - Client Debug (for HTML5)
•Asana - Issue Tracking •AWS - CDN/Monitoring •Discord - Co-working
The HTML5 version?
Flash will be removed at 2020 in Chrome
The Unlight client is Flash
But no one knows CPA will maintenance or not
From TCPSocket to WebSocket
Client Server Packet The TCPSocket send packet directly
Client Server Packet The WebSocket send packet with WebSocket wrapper
WebSocket
Unlight use EventMachine handles connection
Comment out all EventMachine connection
Implement a Rack middleware with WebSocket gem
Add Rack's .ru and it can be served by Puma
or Unicorn
We already migrated 90% server to WebSocket
How the client communicates with the server?
It convert data to a command
Each packet should have a header to describe command
JavaScript can create 2 byte struct?
new Int8Array([0x00, 0x03, 0x00, 0x01, 0x00, 0x0a])
(/‵Д′)/~ ╧╧
You can learn how the C programmer think by Unlight's
Ruby source code
From Golang to WebAssembly
func AuthCmd(name string) []byte { buffer := new(bytes.Buffer) binary.Write(buffer, binary.BigEndian,
uint16(1)) binary.Write(buffer, binary.BigEndian, []byte(name)) return buffer.Bytes() }
GOOS=js GOARCH=wasm go build -o libul.go
Convert Unlight to HTML5 is possible!
What the next?
Test! Test! Test!
We are trying to learn to host a game server
as a programmer
And last ...
New security problem is coming!
Thanks