ArOZ Online 一向也被人吐槽說沒有 Database 只能用 PHP 怎樣做即時通訊的 Web APP 呢?對,這真是一個好問題。
現在處理即時資料的方法
沒錯,這可能比你想像中的還要簡單,現在在 ArOZ Online 上處理即時資料的方法就是每隔一段時間做一次 AJAX Request 問伺服器的 php script 要一次資料。簡單來說就是每一個需要即時資料的模塊裡都會出現一段類似這樣的代碼:
setInterval(function(){
$.ajax({url: url,
success: function(data){
doSomething(data);
}});
},1000);
這有甚麼不好嗎?
不好,這十分不好。首先, ArOZ Online 系統並沒有標準的 Database,所以 SQL 甚麼的都不能用。而且大部分模組開發者也不會這麼有空把 SQLite 塞進去,不少模塊也是直接拿 JSON 或 CSV 檔來儲存資料,就結果而言這種存取方法只會讓系統被 IO 速度卡住,想快也快不了。
所以 AOBWS 就出現了
甚麼是 aobws? aobws 就是 ArOZ Online 基礎系統的 WebSocket 伺服器。這系統有以下幾個特點:
- 支援 ArOZ Cluster 的 JWT 登入模式
- 類 Minecraft 式指令模式
- 以 Channel 分隔的 Broadcast 模式
- 支援單用家多視窗登入
要用它的話跟一般 WebSocket 的使用方法很接近,簡單來說就是使用 ao_module 的 ws 模塊進行 init() 即可。以下是一個簡單的例子
完整例子: https://github.com/aroz-online/aobws_demo/blob/master/index.php
那作為開發者 JWT 的部分我要怎樣處理?
這系統的好處就是你可以不用處理,只要填入 token = “” 即可自動彈出視窗讓使用者輸入 JWT token 值,是不是滿方便呢?
就是這樣,你的模組就能很方便的使用 aobws 作即時通訊了。
備注:如果我想用 aobws 作其他用途怎辦?
可以喔,你也可以在同一個 aob 主系統下使用多個 aobws 作其他用途。你可以在 SystemAOB/system/aobws 下找到啟動檔然後自行更改啟動設定。(主要是更改啟動的 port 跟 登入授權檢查的 URL)。以下為 aobws 的啟動參數:
Usage of aobws.exe:
-cert string
Certification for TLS encription (default "server.crt")
-endpt string
ShadowJWT Validation Endpoint (default "http://localhost/AOB/SystemAOB/system/jwt/validate.php")
-key string
Server key for TLS encription (default "server.key")
-port string
HTTP service address (default "8000")
-tls
Enable TLS support on websocket (aka wss:// instead of ws://). Reqire -cert and -key