2011-12-31 138 views
3

我正在開發一個帶有套接字和RMI的遊戲。套接字部分現在完成我開始RMI部分。我希望能夠邀請某人玩(A-> B)並獲得迴應(B-> A)。如何從服務器調用客戶端上的方法?

你能幫我嗎?

在此先感謝。乾杯

編輯:我一直在研究,我當前也實現客戶端作爲遠程對象以及(定義接口和實現它)。我認爲它被稱爲回調。我在正確的道路上嗎?

我在想什麼是A在B計算機上的遠程對象上調用方法。 B上的服務器詢問客戶端(它也是同一臺計算機中的一臺服務器),如果它想玩A,則獲得響應並將其返回給A.像我說的,我剛剛用tcp和udp套接字完成了這個遊戲,現在我必須在RMI上做同樣的事情。兩個客戶端無法通過RMI直接進行通信,就像通過TCP連接進行通信一樣,是嗎?

+0

RMI教程 - http://docs.oracle.com/javase/tutorial/rmi/index.html – adatapost 2011-12-31 02:36:00

+0

我已經多次閱讀過該教程。問題是它只告訴你如何調用遠程對象上的方法並獲取它返回的結果(如果有的話)。我希望能夠在該對象上調用方法,並讓它在用作服務器的同一臺計算機上調用另一個方法。所以A(客戶端) - > B(服務器獲得邀請請求) - > B(客戶端提示並回復) - > B(服務器收到響應並將其發回給A) - > A(客戶端) – DaveQuinn 2011-12-31 02:44:26

+0

我相信你會需要在將A作爲服務器註冊爲服務器之前,將其作爲參數發送。它確實要求「客戶端」可以監聽並接受連接。 (免責聲明:我沒有真正使用RMI。) – 2011-12-31 03:12:32

回答

2

我一直在研究,我目前正在實現客戶端作爲遠程對象以及(定義接口和實現它)。我認爲它被稱爲回調。我在正確的道路上嗎?

RMI通常作爲客戶端和服務器來實現。客戶端在服務器上進行調用,該服務器返回可以在客戶端上使用的對象。在閱讀完這些評論後,他們說得很對,因爲考慮到你描述問題的方式,你需要讓客戶端也成爲一個RMI服務器。但是,我不相信這是必要的。

例如,假設您有兩個客戶都嘗試玩遊戲。該協議可能是這個樣子:

  1. 一個聯繫服務器S.服務器存儲地址A,然後返回一個等待換另一個玩家類型的消息給A.
  2. A然後接點S每對夫婦幾秒鐘來查看其他玩家是否已經出現。
  3. B然後聯繫S並且在A和B之間開始遊戲。S向B返回開始遊戲消息。S在其存儲器(和/或磁盤)中存儲某種類型的遊戲對象,其跟蹤遊戲。
  4. 下一次A聯繫服務器,它也會得到一個開始遊戲消息。

因此,服務器不需要聯繫A或B,而是每隔一段時間輪詢一次以獲取遊戲更新等。

調用S的方法也可以等待另一個玩家,直到有一個玩家才返回。我認爲輪詢選項更好,因爲那時S就知道A是否停止呼叫,而A不必擔心S撞擊和掛起。

希望這會有所幫助。

+0

感謝您的意見。它現在正在工作,並沒有使用任何回調。 – DaveQuinn 2012-01-04 11:36:46

+0

我不能投票。它說它需要15點聲望。我也不知道如何關閉這個線程你能幫我嗎? – DaveQuinn 2012-01-06 03:45:11

相關問題