如何使用RMI
為每個 RMI 函數指定單獨的 ID
global {} 中的 RMI 函數被指派了序列值 RMI ID。
若要取得所需的 RMI ID 值,請參閱下方的 [id=xxx] 語法。
維持舊的發送和接收方式
將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 衍生類別中的 BeforeRmiInvocation 和 AfterRmiInvocation。
這將導致每次接收時都呼叫重寫的方法。
BeforeRmiInvocation 在 RMI 執行即將到來之前調用,AfterRmiInvocation 在執行結束時調用。 這可以幫助您找到導致處理時間較長的伺服器效能問題的 RMI。
如何列印從存根接收的RMI函數的所有參數 將Stub實例的成員變數m_enableNotifyCallFromStub設為true並覆寫NotifyCallFromStub。 此方法接收轉換為字串的參數,因此您可以在此處留下日誌。 然而,由於RMI處理性能較低,建議僅在絕對必要時使用它。
在 C# 中,您可以使用定義的委託函數,而無需單獨重寫它。
同樣可以在定義的 Stub 物件中找到變數。
隱藏 RMI 名稱
為了在BeforeRmiInvocation等顯示主機傳送和接收的RMI的名稱,可以將所有RMI的名稱儲存在一個執行檔中。
但是,如果您出於安全原因想要隱藏它,請按照以下步驟操作。
在將 ..._proxy.cpp include在 PIDL 編譯結果中之前,將其定義如下。
從版本 1.7.36365 開始,出於安全原因,RMI 函數名稱預設不會出現在 IRmiStub.BeforeRmiInvocation 函數中。
為了顯示PIDL編譯結果的代理,在編譯cpp原始檔之前, 它的定義如下。
Last updated