Upgrade to Pro — share decks privately, control downloads, hide ads and more …

2018 - COSCUP - 來做一個日系卡牌手遊吧!

2018 - COSCUP - 來做一個日系卡牌手遊吧!

蒼時弦や

August 14, 2018
Tweet

More Decks by 蒼時弦や

Other Decks in Programming

Transcript

  1. View Slide

  2. WEB DEVELOPER
    GAME DEVELOPER
    @elct9620

    View Slide

  3. View Slide

  4. View Slide

  5. View Slide

  6. ⋯⋯

    View Slide

  7. View Slide

  8. View Slide

  9. View Slide

  10. View Slide

  11. View Slide

  12. View Slide

  13. HTTP

    View Slide

  14. HTTP

    View Slide

  15. View Slide

  16. HTTP
    TCP
    WebSocket

    View Slide

  17. ~=

    View Slide

  18. View Slide

  19. PHP
    Python
    Java
    Node.js
    Ruby
    Golang
    etc

    View Slide

  20. Ruby on Rails

    View Slide

  21. Ruby on Rails

    View Slide

  22. View Slide

  23. View Slide

  24. View Slide

  25. Ruby on Rails

    View Slide

  26. View Slide

  27. View Slide

  28. 考 Unity ª ASP.net
    JavaScript ªNode.js
    Python ª Django
    RPG Maker ª Ruby on Rails
    C/C++ ª Golang

    View Slide

  29. View Slide

  30. View Slide

  31. View Slide

  32. OAuth2
    Facebook / Google
    API

    View Slide

  33. OAuth2
    1.
    2.

    View Slide

  34. OAuth2
    3.
    4.

    View Slide

  35. OAuth2
    5.
    6.

    View Slide

  36. SOP

    View Slide

  37. Ex. Firebase / AWS Cognito

    View Slide

  38. Firebase ⋯⋯

    View Slide

  39. API
    SSL
    RESTful
    JSON
    Deserialize

    View Slide

  40. View Slide

  41. View Slide

  42. View Slide

  43. View Slide

  44. View Slide

  45. View Slide

  46. SSL
    SSL

    View Slide

  47. View Slide

  48. View Slide

  49. View Slide

  50. View Slide

  51. OS

    View Slide

  52. SSL
    Ex. AWS Certi cate Manager

    View Slide

  53. OAuth2
    Provider
    doorkeeper

    View Slide

  54. View Slide

  55. View Slide

  56. HSM
    Hardware Security Module
    Token AES
    OAuth2 Refresh Token
    Token Device ID

    View Slide

  57. Unity

    View Slide

  58. RESTful API
    /

    View Slide

  59. RESTful API
    GET /users/1/cards.json
    GET /chapters/1/stories.json
    POST /chapters/1/stories/1/start.json
    POST /gachas/1/ draw.json
    PUT /mission/forward.json

    View Slide

  60. JSON
    {
    "id": 1,
    "name": "如何使⽤用道具",
    "chpater": {
    "id": 1,
    "name": “新⼿手教學"
    }
    }

    View Slide

  61. JSON
    [System.Serializable]
    public class Story {
    public int id;
    public string name;
    public Chapter chapter;
    }

    View Slide

  62. JSON
    Story story =
    JsonUtility.FromJson (jsonText);

    View Slide

  63. View Slide

  64. SQLite
    SQLCipher
    考 Primary Key
    Asset Bundle

    View Slide

  65. Asset Bundle

    View Slide

  66. AssetBundle
    Zip
    Bundle API
    App Store / Google Play

    View Slide

  67. Unity Compile SQLCipher ⋯⋯

    View Slide

  68. View Slide

  69. def draw
    weights = @items.map(&:weight)
    n = (1..weights.sum)
    weights.each_with_index do |weight, i|
    n -= weight
    return @items[i] if n <= 0
    end
    end

    View Slide

  70. X( ) * Y )

    View Slide

  71. View Slide

  72. PickUp

    View Slide

  73. PickUp

    View Slide

  74. Demo: Rails + Unity3D

    View Slide

  75. Request
    API
    API
    Client

    View Slide

  76. Ruby on Rails
    describe 'GET /v1/chapters/:id/stories' do
    before do
    get api_v1_chapter_stories_path(chapter), params: params
    end
    it_behaves_like 'valid response'
    it 'returns available chapters' do
    json = JSON.parse(response.body)
    hash = JSON.parse(serialized_json(chapter.stories))
    expect(json).to match_array(hash)
    end
    end

    View Slide

  77. Ruby on Rails
    it 'returns canceled mission' do
    json = JSON.parse(response.body)
    hash = JSON.parse(serialized_json(mission.reload))
    expect(json).to match(hash)
    end
    it 'should have canceled_at time' do
    json = JSON.parse(response.body)
    expect(json['canceled_at']).not_to be_nil
    end

    View Slide

  78. View Slide

  79. vs VPS vs

    View Slide

  80. Ex.

    View Slide

  81. VPS

    View Slide

  82. VPS
    Digital Ocean
    Linode
    Vultr
    AWS Lightsail

    View Slide

  83. Digital Ocean CPU

    View Slide

  84. Linode 考 VPS

    View Slide

  85. Vultr 現

    View Slide

  86. AWS Lightsail EC2 

    AWS

    View Slide

  87. Ex. AWS

    View Slide

  88. Microsoft Azure
    Google Cloud Platform
    Amazon Web Service

    View Slide

  89. Azure

    View Slide

  90. GCP/AWS

    View Slide

  91. GCP

    View Slide

  92. Google

    View Slide

  93. View Slide

  94. AWS

    View Slide

  95. View Slide

  96. View Slide

  97. Ex. EC2/ELB

    View Slide

  98. SOP
    VPS or

    View Slide

  99. Heroku or Firebase

    View Slide

  100. Firebase

    View Slide

  101. NoSQL

    View Slide

  102. Heroku

    View Slide

  103. View Slide

  104. Linux Ex. CentOS / Amazon Linux
    yum install or
    Ex. Web Server Worker
    Ex.

    View Slide

  105. yum install

    View Slide

  106. AWS OpsWork

    View Slide

  107. View Slide

  108. View Slide

  109. AWS RDS
    Aurora AWS

    View Slide

  110. ufw

    View Slide

  111. Digital Ocean

    View Slide

  112. AWS VPC

    View Slide

  113. VPC

    View Slide

  114. View Slide

  115. Cache
    Ex.
    Ex.

    View Slide

  116. Load Balancing
    Ex.
    CPU
    Ex. HAProxy
    Ex. AWS ELB
    CPU Ex.

    View Slide

  117. Database Sharding
    Ex. AWS Aurora

    View Slide

  118. SOA
    Service-Oriented Architecture
    Microservice
    MMORPG

    View Slide

  119. View Slide

  120. View Slide

  121. View Slide

  122. View Slide

  123. View Slide

  124. View Slide

  125. View Slide

  126. View Slide

  127. View Slide

  128. View Slide

  129. View Slide

  130. DB Client
    INSERT INTO WHERE
    SQL

    View Slide

  131. 112 \w+
    500
    CPU 20% 50%
    200

    View Slide

  132. ⋯⋯

    View Slide

  133. View Slide

  134. GitHub

    View Slide

  135. Unity

    View Slide

  136. View Slide

  137. Unity
    Server Web

    View Slide

  138. Client Unity JavaScript

    View Slide

  139. JSON

    View Slide

  140. View Slide

  141. View Slide

  142. View Slide

  143. AWS
    GCP

    View Slide

  144. Ruby on Rails ActionCable
    Golang AnyCable

    View Slide

  145. View Slide

  146. View Slide

  147. View Slide

  148. AWS OpsWork
    Laravel Ruby on Rails

    View Slide

  149. View Slide

  150. Thanks

    View Slide