跳到主要內容

精選

對於玩家們常會說的「懷念以前的遊戲」甚至覺得以前的遊戲比較好玩觀點與AI進行探討part1

 接下來針對一些玩家對於很多遊戲習慣會說的以前“ 遊戲比較好玩 ”這點來進行相關的提問 當然我知道我這提問只是一個面向,不過可以看看AI是如和回應的 問題: 有時候,對於遊戲玩家中很常見的一些說法,也覺得有點矛盾,感覺很多人似乎並不是真的理解自己在說些什麼。   像是常常有很多人都喜歡說什麼「懷念以前的遊戲」,或是覺得以前那樣在遊戲中可以做自己想做的事情,覺得很棒,認為現在的遊戲怎麼都只有唯一解,或是只有少數的流派之類的。   但是實際上拆解開來看,以前的遊戲,單純只是因為那時候大家沒有在查攻略玩遊戲而已,難道不是這樣嗎?如果你那時候去查了攻略,不就會發現更好練或是更強的方式,然後就會發現自己在做傻事,結果就是改變自己的玩法。   所以,只要你現在玩家玩新遊戲的時候也都不要查攻略,那你怎麼會覺得只有唯一解?這觀點本身就是有問題的啊。 就是因為你去查了攻略,發現有更好練或是更強的方法,才反而覺得是唯一解不是嗎?   因為照那樣的說法成立,其實現在的新遊戲就不應該開放大家討論,也不要有相關的討論版,任何問那個遊戲的文章都要刪掉,這樣大家就會回到以前那種遊玩模式。 但是,難道大家會想要這樣玩遊戲嗎? 其實現代的遊戲玩家根本就不想那樣玩遊戲啊,結果他們自己的行為根本就是矛盾的,卻整天只會做這種膚淺的言論來抱怨。   如果真的想要玩到更好玩的遊戲,我其實真的覺得,玩家自己本身也是可以提升,甚至帶動整個風氣一起提升不是嗎?而不是只會做那種膚淺的抱怨,卻完全沒說到真正的點上吧。 --- 回應: 「以前遊戲比較自由」這句話,問題出在哪? 你點到一個關鍵: 以前不是沒有唯一解,而是「大家不知道唯一解在哪」 。 為什麼以前看起來比較自由? 沒有現在這麼即時、完整的攻略 沒有 YouTube、Wiki、Discord 秒解 資訊流通慢,玩家彼此之間是「局部知識」 所以結果是: 每個人玩法都不一樣 很多「其實很爛但當下覺得OK」的玩法能存活 玩家會把「不知道更好的解法」誤認成「設計上的自由」 但只要 當年有完整攻略 ,會發生什麼事? 大家一樣會改玩法,一樣會往效率最高的方向靠。 你說得沒錯: 一旦你知道有更快、更強、更省的方式,繼續用...

遊戲伺服器2025年初架設與研究part9簡單介紹Gunicorn + Flask與Uvicorn + FastAPI並簡單架設

 先前針對我們Nginx的搭配使用

已經可以簡單的做到基本的https設置

那接下來分別進行兩組插件進行分享

分別是Gunicorn + Flask

跟Uvicorn + FastAPI

首先簡單介紹一下這兩個組合主要功能是應對什麼

兩個組合都可以很好的應用在伺服器運行上

舉例來說Flask跟FastAPI就是框架的腳色

而Gunicorn 跟Uvicorn 則是伺服器的腳色,也就是啟動Http服務等等

並且主要的部署方式為systemd + Nginx + Supervisor

先前已經有使用了systemd + Nginx

首先兩者都有各自的優缺點

不過Uvicorn + FastAPI算是比較年輕的,是比較新的插件

所以要當伺服器功能的話能查到比較多資料的是Gunicorn + Flask

主要差異的話FastAPI是異步運行(非同步)

而Flask則是同步運行

所以理論上效能FastAPI會比較好


這邊也簡單的介紹一下兩種用法

首先是安裝

安裝前記得先切到虛擬環境之中(前面有帶venv)

pip install flask gunicorn


from flask import Flask, jsonify

app = Flask(__name__)

@app.route("/")
def hello():
    return jsonify(message="Hello, Flask + Gunicorn!")

if __name__ == "__main__":
    app.run()


新增一個python檔案寫入以上的內容,python檔案假設取名為main.py

其中最後的__name__的部分是直接執行python才會使用到

不過剛開始可以直接執行先測試看看有沒有直接報錯(之後可以拿掉)

接下來可以到我們的Nginx,這邊新增設定檔可以參考先前的文章

那主要就是以下的指令

sudo nano /etc/nginx/sites-available/各自的設定檔名稱


server_name 自己的網域 www.自己的網域;

    location / {
        proxy_pass http://127.0.0.1:7899;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }


7899可替換自己想要監聽的port

接下來請建立服務檔來執行,當然這邊也可以透過gunicorn 指令直接執行

gunicorn --workers 4 --bind 0.0.0.0:7899 main:app

那加到服務中就可以開機後自動啟動

如以下方式

sudo nano /etc/systemd/system/your_main.service

這邊服務新增方式如同之前有講過的,是一樣的東西

先建立一個服務檔案,接下來在裡面輸入以下內容


[Unit]
Description=Flask Gunicorn
After=network.target
[Service]
User=自己的User
Group=自己的Group(好像可以不用)
WorkingDirectory=/home/User/專案路徑(要執行的python位置)
ExecStart=/home/User/專案路徑/venv/bin/gunicorn --bind 127.0.0.1:7899 main:app

Restart=always
Environment="PATH=/home/User/專案路徑/venv/bin"

[Install]
WantedBy=multi-user.target


關鍵就是ExecStart的部分,那邊讓gunicorn去執行你的腳本

那這邊記得都使用虛擬環境下的路徑,如果沒有用虛擬環境則是找到對應路徑即可

服務檔案處理完畢後

sudo systemctl daemon-reload

先reload

接著是啟動你的服務檔

sudo systemctl enable your_main

sudo systemctl start your_main

記得檔名請換成自己取的

這樣就可以簡單的建立伺服器的效果(可以測試在瀏覽器輸入自己的網域)

當然需要什麼內容就可以在python內加入


接下來是

pip install fastapi uvicorn[standard]

一樣記得建議在虛擬環境中安裝

接下來一樣的使用步驟,整理算是非常相似

這邊一樣提供一個很簡單的範例

首先新增main.py

或是自己想要的名字,或是不想跟剛剛重覆名稱可以改個main2.py


from fastapi import FastAPI

app = FastAPI()

@app.get("/")
async def root():
    return {"message": "Hello, FastAPI + Uvicorn!"}


裡面內容打這樣

並且如果想直接用指令執行腳本可以打以下的指令

uvicorn main:app --host 0.0.0.0 --port 8000 --workers 4

那這邊只是測試使用就好,因為0.0.0.0會對所有IP的8000port都開放

測試可以運行就可以先關閉了

那接下來一樣是去調整Nginx設定檔

sudo nano /etc/nginx/sites-available/各自的設定檔名稱

並在設定檔的區域加入以下內容


server_name 自己的網域 www.自己的網域;
location / {
        proxy_pass http://127.0.0.1:7899/;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }


這邊沒有限制不能與先前的Flask共用

但是要注意port要分開,並且不能監聽同一個網址

也就是說如果兩種都想要用其中一個的location /要改成別的

這邊舉例可以換成location /uvicorn/

不過瀏覽的時候就要記得網域後面要記得加/uvicorn

這樣才看的到這邊的內容,並且上面的server_name只要加一次

不用重複加兩次server_name

接下來一樣是服務檔的新增

這邊如果大家想跟上面的設定檔都保留的話,可以設置不同的檔名

當然如果希望先中止服務也可以輸入以下的指令來先中止服務

sudo systemctl stop  自己要中止的服務檔.service

這邊同時運行多個服務也不會有問題,所以先前的保持運行也沒問題

只要注意不要使用到同一個port跟location /


[Unit]
Description=FastAPI App via Uvicorn
After=network.target

[Service]
User=自己的User
Group=自己的Group(好像可以不用?)
WorkingDirectory=/home/User/專案路徑
Environment="PATH=/home/User/專案路徑/venv/bin"
ExecStart=/home/User/專案路徑/venv/bin/uvicorn \
main2:app \ --workers 4 \ --host 0.0.0.0 \ --port 7899 [Install] WantedBy=multi-user.target


之後透過一樣的方式

sudo systemctl daemon-reload

先reload接著是啟動你的服務檔

sudo systemctl enable 自己的服務檔名稱

sudo systemctl start 自己的服務檔名稱

運行後就可以去瀏覽器確認一下是否有看到內容

那如果運行有問題

這邊也提供可以看目前服務運行狀態的指令(可以看到執行錯誤)

sudo systemctl status 自己的服務檔名稱.service

那如果腳本有改,可以透過以下指令重新讀取後開啟

sudo systemctl restart 自己的服務檔名稱.service

那這樣這兩種伺服器就可以簡單的架設了出來

也可以透過對應的網域跟網域+自己輸入的網址來查看對應內容了


這次也就分享到這邊

兩種不同的方式都可以快速的架設出網站與伺服器,相當便利且好用

如果還有什麼疑問也可以提出,或是有什麼講錯的地方也歡迎指正









留言