ArOZ Online 的 WebSocket 伺服器與 JWT 登入方法
Toby
Toby

ArOZ Online 一向也被人吐槽說沒有 Database 只能用 PHP 怎樣做即時通訊的 Web APP 呢?對,這真是一個好問題。

現在處理即時資料的方法

現在的 Web Desktop 模式即時更新方式

沒錯,這可能比你想像中的還要簡單,現在在 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() 即可。以下是一個簡單的例子

aobws 網頁端啟動 function 例子

完整例子: https://github.com/aroz-online/aobws_demo/blob/master/index.php

那作為開發者 JWT 的部分我要怎樣處理?

這系統的好處就是你可以不用處理,只要填入 token = “” 即可自動彈出視窗讓使用者輸入 JWT token 值,是不是滿方便呢?

JWT 請求授權界面

就是這樣,你的模組就能很方便的使用 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