跳到主要內容

精選

遊戲伺服器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年初架設與研究part4透過服務功能(service)自動啟用腳本/架站-支援開機啟動

 那先前我們已經測試過程式碼已經可以順利運行


也就是在伺服器的對應虛擬環境中,已經可以順利的透過python3 yourfile.py來執行

執行後也沒有看到錯誤,並且透過瀏覽器瀏覽設定好的網域


應該就能從對應的資料庫中看到資料被寫入

那以我使用PostgreSQL的資料庫來看

這邊也提供一個可以遠端查看資料庫的方式

不過這邊也要提醒一下,如果有安全性考量,記得要設計的嚴謹一些

畢竟資料庫也是遊戲中相當重要的一環,跟SSH連線一樣需要相當程度的保護

避免被駭入的準備還是相當重要的~

例如只接受內網連線等等,以下這個就是指定8080的內網,可以根據需要調整

sudo ufw allow from 192.168.1.0/24 to any port 8080


而這邊使用遠端查看DB的方式也就選用PostgreSQL官方提供的pgadmin


這個可以去官網上下載,可以根據自己的系統選擇版本下載

那想查詢表格的話,可以在sql輸入區域輸入



SELECT * FROM public.test_logs

ORDER BY id ASC 

當然表格名稱要打自己的

就可以看到寫入到table的資料了

那確定這個python檔案確實正確執行後,我們接下來就可以來測試將這個腳本當作網站部屬起來


並且我們通常都會希望能伺服器一開機就自動啟用這種功能(如同伺服器開機就啟動遊戲伺服器功能)


那我們需要先建立一個服務檔案,例如以下這樣,當然檔名可以自己取

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


接下來內容如以下範例


[Unit]

Description=My Python App

After=network.target


[Service]

ExecStart=/home/user/appname/venv/bin/gunicorn --bind 127.0.0.1:8000 main:app

WorkingDirectory=/home/yourname/myproject

Restart=always

User=yourname

Group=your_group_name

Environment="PATH=/home/user/appname/venv/bin"


[Install]

WantedBy=multi-user.target


內容中雖然可以打註解,並且註解是用#

那這邊要注意註解不能直接加在字後面

例如前面有After=network.target 你直接在後面打#這表示服務要在網路後啟動

這樣打會有問題,得換行打註解

當然這部分我只是根據測試結果說明一下,也許詳細有更複雜的規則

所以只是提醒不能直接在後面打#+註解

那主要這執行也包含了要使用虛擬環境來啟用,所以如果沒有用虛擬環境的話這邊寫法會稍微有一些不同,這邊要注意一下

修改完記得ctrl+O按Enter存檔,接著crtl+X退出

接下來可以手動啟用一下測試看看有沒有問題

sudo systemctl start myapp.service

啟用後可以透過以下這個確認狀態,或是是否有log印出來

sudo systemctl status myapp.service

那如果沒問題,接下來就可以設置開機自動啟用了

sudo systemctl enable myapp.service

在這邊輸入

sudo systemctl daemon-reexec

或是

sudo systemctl daemon-reload

可以重新加載(修改完可以輸入)

接下來這個類網站的功能就成功可以自動啟用了

並且跟先前不同,先前如果用python打指令啟用的話會占用你的SSH輸入(並且ctrl+C可以中止)

那現在就不會看到任何訊息,而且不會占用SSH了,就可以繼續實作其他功能,或是其它網站了,並做其它測試了

當然如果怕忘了先前有啟用的服務,也可以手動檢查

例如使用

ls /etc/systemd/system/

找一下那些.service的檔案

這次就先分享到這邊

主要這個功能就已經可以讓我們伺服器有基本的自動重啟的能力了

如有疑問也歡迎詢問,並且有需要指證的地方也歡迎~






留言