This document is about: SERVER 5
SWITCH TO

WebRPCs

WebRPC是一種靈活的方式,可以將外部服務與Photon server結合起來。

例如,通過WebRPC,Photon客戶端可以要求伺服器從外部網絡服務中獲取數據。

網絡服務基礎知識

WebRPC的架構很簡單。
Photon伺服器在客戶端和網絡伺服器之間扮演一個_代理_或_中繼_的角色。
WebRPC也可以看作是Webhooks的延伸,甚至可以看作是自定義的客戶端驅動的Webhooks。

請注意以下開發提示:

  • 您可以使用任何語言、框架或網絡伺服器來實現WebRPCs的服務。
  • 在任何情況下,盡量減少您發送的數據,以保持事情的精簡和對玩家的便宜。

配置

在Photon伺服器上,WebRPC的配置可以在:

  • "deploy\LoadBalancing\Master\bin\Master.xml.config" 用於主伺服器
  • "deploy\LoadBalancing\GameServer\bin\GameServer.xml.config" 用於遊戲伺服器

它需要一個 BaseURL 值,並且可以被禁用。
下面是一個配置的例子:

XML

<WebRpc Enabled="true">
    <BaseUrl Value="https://example.com/WebRPC" />
</WebRpc>

請求

在客戶端,Photon WebRPC是一個Photon操作,在連接到主伺服器或遊戲伺服器時允許使用。
它需要一個URI路徑字符串(又稱WebRPC方法名稱)和一個包含要發送給網絡服務的數據的第二個參數(又稱WebRPC參數)。

這兩個參數可以傳遞給LoadBalancingClient.OpWebRpc方法。

UriPath是WebRPC的相對路徑,應該與遠程過程的名稱相匹配。
也可以在URL本身中發送參數。
在這種情況下,_query string_應該包含在存儲過程的名稱中,並附加到相對路徑上。

當Photon伺服器收到請求時,存儲過程的名稱將與BaseURL連接,形成WebRPC的URL的絕對路徑,然後將其轉發給同一URL的網絡服務。

由於使用的HTTP請求方法是POST,如果客戶端發送了任何參數,Photon將把它們作為JSON POST數據與默認屬性一起傳遞過去。

  • AppVersion:
    您的應用程序的版本,由遊戲客戶端設置。
  • UserId:
    進行WebRPC的Actor的ID。

找到的任何其他屬性都是客戶端發送的參數的一部分。
如果客戶端使用的WebRpcParameters類型是Dictionary<string, object>,那麼所有的鍵/值對將被發送到數據的根對象中。
否則,如果它是任何其他有效的JSON類型,它將作為一個新的屬性RpcParams的值被包含。

Example 1

您的BaseURL是https://my.service.org,客戶端調用WebRPC("method?id=1", parameters)
參數是一個Dictionary<string, object>,它有一個{{"key1": 1}, {"key2": "yx"}, {"key3": true}} 作為內容。
在這種情況下,Photon將調用https://my.service.org/method?id=1,並額外發送JSON:

JSON

{
    "AppId": "00000000-0000-0000-0000-000000000000",
    "AppVersion": "client-x.y.z",
    "Region": "EU",
    "UserId": "userXYZ",
    "key1": 1,
    "key2": "yx",
    "key3": true
}

Example 2

您的BaseURL是https://my.service.org,客戶端調用WebRPC("method?id=1", parameters)
參數是一個對象的數組。object[] { 0, "xy", false }
在這種情況下,Photon將調用https://my.service.org/method?id=1,並另外發送 JSON:

JSON

{
    "AppId": "00000000-0000-0000-0000-000000000000",
    "AppVersion": "client-x.y.z",
    "Region": "EU",
    "UserId": "userXYZ",
    "RpcParams": [0, "xy", false]
}

Example 3

您的BaseURL是https://my.service.org,客戶端調用WebRPC("method?id=1", parameters)
參數是一個原始的簡單類型。比方說一個字符串 "test"。
在這種情況下,Photon將調用https://my.service.org/method?id=1,並另外發送JSON:

JSON

{
    "AppId": "00000000-0000-0000-0000-000000000000",
    "AppVersion": "client-x.y.z",
    "Region": "EU",
    "UserId": "userXYZ",
    "RpcParams": "test"
}

發送安全數據

AuthCookie可以在針對自定義認証提供者的成功認証後被檢索到。

欲了解更多信息,請訪問自定義認証文檔頁面

響應

WebRPCs的網絡服務必須用一個JSON對象來響應,以便Photon將結果發回給客戶端。
預期的響應必須包括 ResultCodeData 和可選的 Message

ResultCode應該是0表示OK,任何其他代碼表示錯誤。
您可以編造它們來幫助客戶端處理錯誤,添加一個可讀的字符串信息總是一個最佳做法。

Data可以是空的,但如果您發送任何東西,它必須是一個有效的JSON對象。

Example 1<!--

JSON

{
    "ResultCode": "0"
}

Example 2<!--

JSON

{
    "ResultCode": "1",
    "Message": "Self-explanatory error message"
}

Example 3<!--

JSON

{
    "ResultCode": "1",
    "Data": {
        "Key1": "V",
        "Key2": 1,
        "Key3": true
    }
}
Back to top