跳到主要內容

精選

遊戲伺服器2025年初架設與研究part14收送封包的Json格式與Unity內建JsonUtility相關的問題(支援性)

 上次針對如何在Unity的新版TMP Text中使用中文字 而這次則是來分享一下先前有提過的 Json文字轉換 的問題 首先我們知道Unity內建的Json轉換是 JsonUtility JsonUtility 在使用上有一些限制在 算是有優點也有缺點 優點是畢竟是寫在Unity底層的, 效能 比較好 如果功能沒有問題的情況下,可以比額外安裝的Json轉換插件效能要好上不少 甚至有些插件能差兩倍以上的執行效能 不過自然也是有缺點 就是它有不少 不支援 的型別 很多時候常常讓伺服器與遊戲端的人打架的其中一個原因,伺服器表示資料明明就有送,遊戲端則是表示我沒收到(伺服器傳的Json格式轉不出來的種種問題或是可能性) 詳細可以參考Unity的官方文件 https://docs.unity3d.com/6000.1/Documentation/Manual/json-serialization.html 那我這邊也把一些重點特別拿出來講 首先我們先前在聊天訊息回傳的時候,就已經有用到基本的功能 可以先看到我們伺服器端的程式碼(Python) 如以上這語法 這是我們先前使用的方式 那這邊因為是跟先前相同的 相同的部分我就用截圖來顯示(詳細程式碼在Part11有可以複製) 可以看到我們主要回傳的結構 json.dumps({"type": "chat", "message": msg}) 這段就是把後面的內容透過Json轉換成Json字串後傳給使用者(遊戲端) 而我們Unity接收的位置是這樣寫的 ServerPacket packet = JsonUtility.FromJson<ServerPacket>(json); 這行就是我們今天 主要 想討論的地方 並且假設大家想要使用額外安裝的Json套件,也幾乎就是替換這行就能達到想要的效果 接下來我們看到ServerPacket這個class 這邊可以看到關鍵是我們的class要 可序列化 也就是說要加上 [Serializable] 那雖然說是只要加上可序列化,就能轉換 但是也是因為這樣,有很多不能被Unity內建支援的型別,則會轉換不出來 而...

遊戲伺服器2025年初架設與研究part8透過Certbot與Nginx搭配使用自動續約Let's EncryptSSL憑證完成雙向https

 這次來整理一下常見的SSL自動續約機制


當然這邊是已經使用了Cloudflare搭配網域有了https的狀態

伺服器系統使用Ubuntu主板號22的(22.0.XX)

首先可以先從Cloudflare後台開始

點選SSL/TLS的選項,右邊點"設定"

應該就會看到加密預設應該會是"彈性"

那彈性的意思就是透過Cloudflare到使用者那邊會是https

但是Cloudflare到你的伺服器,則沒有強制https,也就是說可以http

那一般來說,沒有特別處理的話,這邊轉發後就會只有http

但即便只有這一小段,還是會有些風險存在的

加上有部分連線會要求整段連線都必須是https(檢查整段連線)

那主要這邊就是簡單說明一下如何設定成"完整"

當然處理完之前還先別改成完整

避免底下操作有異常,等SSL憑證的部分完成再調整設定

完整的話就可以整段都是https(包含使用者<-->Cloudflare<-->你的伺服器)

那完整(嚴格)的話,通常就是要錢的,這邊就先不考慮

當然你也可以當作等級跟安全性更高的而選擇使用完整(嚴格)

這邊以能設定成"完整"為主

雖然之前也有稍微帶過,不過這邊就再補充詳細一些

可以透過Certbot來取得憑證,就可以把這段也透過https來發送了

Nginx + Certbot來處理SSL

那首先安裝指令我先列出來

sudo apt install -y certbot python3-certbot-nginx

接下來使用nginx的設定檔來建立轉發的站點

先前雖然也有大概帶過,不過這邊一併說明

先創建設定檔

sudo nano /etc/nginx/sites-available/myproject

後面的myproject可以自己取名字,可能是專案名,也可以是網域名等等的,方便好記


server {
    listen 80;
    listen [::]:80;
    server_name example.com www.example.com;
    }
    
location / {
    proxy_pass http://unix:/home/deployuser/projects/myapp/myapp.sock;
    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;
    }

接著是連接設定檔,記得網域的名稱要替換掉

然後proxy_pass的路徑記得調整成自己放置的路徑例如http://127.0.0.1:5666(我是先放了個python首頁,不過可能不是必要的)


sudo ln -s /etc/nginx/sites-available/myproject /etc/nginx/sites-enabled/
sudo nginx -t   # 測試設定語法
sudo systemctl reload nginx


這邊主要就是把編寫好的設定檔連結到啟用的區域去執行

執行前記得需要-t進行測試

如果內容沒有問題則會得到success ok兩個綠色的成功

接下來執行以下指令

sudo certbot --nginx -d example.com -d www.example.com

注意那兩個example都是自己的網域,兩個替換好再送出

接下來會有一個流程操作,根據版本可能會有些許不同的問題,或是顯示方式

不過基本上主要就是以下這幾個

詢問輸入 email、同意 TOS、選擇是否 redirect all traffic to HTTPS(通常選 Yes)

並且它還會自動修改你剛剛的nginx設定檔

所以整個流程跑完後去看nginx內容有不一樣是正常的

完成後也可以進行一次測試,接著讓它reload

sudo nginx -t

sudo systemctl reload nginx

這樣應該就能正常運作了

並且先前Cloudflare的安全性設置也可以調整成完整了

這邊也提供一個可以檢查SSL憑證時間的指令

sudo systemctl list-timers | grep certbot

這次就先分享到這邊,如果還有什麼疑問,歡迎提問

如果有講錯的地方,也歡迎提出來~





留言