如何使用RMI

為每個 RMI 函數指定單獨的 ID

global {} 中的 RMI 函數被指派了序列值 RMI ID。

若要取得所需的 RMI ID 值,請參閱下方的 [id=xxx] 語法。

global MedivalWorld 10000
{
    Foo([in] int x);                   // id=10001 自動分配
    [id=13000] id=Foo2([in] int y);    // 強制指定為 id=13000
}

維持舊的發送和接收方式

將ProudNet引入使用過去的發送/接收處理方法建立的程式時,建議更改為RMI方法。 它可以防止程式設計師錯誤地建立發送/接收例程而犯錯,使以後的開發更加方便。

但是,如果您確實需要 RMI 以外的舊傳輸/接收處理方法,我們提供以下替代方法。

- 無需 RMI 即可發送和接收自訂訊息

以下函數用於在不使用Remote Method Invocation的情況下傳送使用者定義的訊息。

傳送
接收回呼

Proud.CNetClient.SendUserMessage

Proud.INetClientEvent.OnReceiveUserMessage

Proud.CNetClient.SendUserMessage

Proud.INetServerEvent.OnReceiveUserMessage

Proud.CLanClient.SendUserMessage

Proud.ILanClientEvent.OnReceiveUserMessage

Proud.CLanServer.SendUserMessage

Proud.ILanServerEvent.OnReceiveUserMessage

- 使用 RMI 參數發送和接收使用者定義的訊息

存取所有 RMI 呼叫點

ProudNet 有一個可以存取 RMI 呼叫時間的設備。

  • 記錄所有 RMI 調用

  • 透過測量每個 RMI 的執行時間來優化遊戲伺服器效能

- 從發送方(Proxy)存取呼叫點

1. 首先,為 PIDL 編譯器輸出建立一個 Proxy 衍生類別。 2. 覆蓋NotifySendByProxy

這將導致在每次發送時調用重寫的方法。

預設情況下,NotifySendByProxy()被設定為被調用, 為了進一步提高效能,如果您想要阻止 NotifySendByProxy() 呼叫本身,請將 m_enableNotifySendByProxy 設為 false,這樣 NotifySendByProxy() 將不再被呼叫。

- 存取接收方(Stub)呼叫點

1. 將Stub實例的成員變數m_enableStubProfiling(enableStubProfiling)設為true。 2. 重寫 PIDL 編譯器輸出的 Stub 衍生類別中的 BeforeRmiInvocationAfterRmiInvocation

這將導致每次接收時都呼叫重寫的方法。

circle-info

BeforeRmiInvocation 在 RMI 執行即將到來之前調用,AfterRmiInvocation 在執行結束時調用。 這可以幫助您找到導致處理時間較長的伺服器效能問題的 RMI。

circle-check
circle-info

在 C# 中,您可以使用定義的委託函數,而無需單獨重寫它。

同樣可以在定義的 Stub 物件中找到變數。

隱藏 RMI 名稱

為了在BeforeRmiInvocation等顯示主機傳送和接收的RMI的名稱,可以將所有RMI的名稱儲存在一個執行檔中。

但是,如果您出於安全原因想要隱藏它,請按照以下步驟操作。

在將 ..._proxy.cpp include在 PIDL 編譯結果中之前,將其定義如下。

triangle-exclamation


⬅️ 返回

Last updated