跳到主要內容

精選

遊戲伺服器2025年初架設與研究part11-Websocket與Unity的登入+聊天室精簡版

 那先前使用Websocket的內容經過一段時間研究 也算是有了一些進展 並且先前也有人對於websocket那篇筆記一次講的內容有點太多,會不好理解 導致可能中途就遭遇了一些BUG比較難解決的 那這次就把相關的內容進行了一些精簡 讓大家可以更快速的架設好websocket的內容 當然這邊也可以當作是不同的使用方式 隨著學習各種不同的資訊,也能更清楚地理解這些其實是不同的使用方式。 因此,這方面完全可以多學幾種,以便因應各種不同的情況。 首先是 Unity 專案的準備 我們必須把常用的 Websocket 插件準備好(Unity) https://github.com/endel/NativeWebSocket 這是較多人使用的 Websocket 插件 可以根據Github那邊寫的資訊進行操作 匯入 到Unity專案內 那我這邊也直接提供方式 首先在你的Unity專案中,上方的選單選擇Window 底下選到 Package Manager 打開Package Manager 點選有URL的選項( Install package from git URL ) 接著請在這個URL框內輸入對應的內容 也就是 https://github.com/endel/NativeWebSocket.git#upm 輸入好之後就點擊最右邊的install安裝就好了 安裝好會如圖這樣我們可以看到 Native WebSockets 插件會在這個位置 如果需要更新,可以在右邊的選單點Update即可 這樣在Unity內就可以使用Websocket相關的語法了 接著我們回到伺服器的地方,也就是我們的 Ubuntu server 首先確保在虛擬環境當中進行安裝 websocket 插件 簡單的確認方式就是看現在輸入的位置前方有無 (venv) 確認好之後可以進行安裝pip install websockets 接著請在想要執行的位置新增一個python檔案(.py) 我這邊是在自己電腦的python專案內新增了一個python檔案main.py 內容如下 import asyncio import websockets import json co...

遊戲伺服器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

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

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


這次也就分享到這邊

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

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









留言