国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

ホームページ Java &#&はじめる Java RMI リモート呼び出し手順の分析

Java RMI リモート呼び出し手順の分析

Feb 19, 2021 am 09:50 AM

Java RMI リモート呼び出し手順の分析

まず Java RMI の定義を見(jiàn)てみましょう:

RMI (Remote Method Invocation、リモート メソッド呼び出し) は、Java を使用して JDK1.2 に実裝されています。分散アプリケーションを開(kāi)発する Java の機(jī)能が大幅に強(qiáng)化されます。人気のあるネットワーク開(kāi)発言語(yǔ)としての Java の大きな力は、分散ネットワーク アプリケーションを開(kāi)発する強(qiáng)力な機(jī)能に反映されており、RMI は 100% 純粋な Java ネットワーク分散アプリケーション システムを開(kāi)発するためのコア ソリューションの 1 つです。実際、これは RPC の Java バージョンと考えることができます。しかし、従來(lái)の RPC は分散オブジェクト システムにはうまく適用できません。 Java RMI は、異なるアドレス空間に格納されたプログラム レベルのオブジェクト間の通信をサポートし、リモート オブジェクト間のシームレスなリモート呼び出しを?qū)g現(xiàn)します。

RMI リモート呼び出し手順

RMI の相互作用図:

Java RMI リモート呼び出し手順の分析

RMI は 3 つの部分で構(gòu)成され、最初の部分は rmiregistry (JDK が提供する) です。 1 つは獨(dú)立して実行できるプログラム (bin ディレクトリ內(nèi))、2 つ目はリモート オブジェクトを外部に提供するサーバー側(cè)プログラム、3 つ目はリモート オブジェクトのメソッドを呼び出すクライアント側(cè)プログラムです。
まず、rmiregistry サービスを開(kāi)始します。開(kāi)始時(shí)に、サービスがリッスンするポートを指定することも、デフォルトのポート (1099) を使用することもできます。
2 番目に、サーバーはまずローカルでサービスを提供する実裝クラスをインスタンス化し、次に Naming/Context/Registry (以下の例で使用されているレジストリ) のバインドまたは再バインド メソッドと、RMI によって提供される他のクラスを使用して、実裝のみをインスタンス化します。これで、クラスは rmiregistry に登録され、名前付きで外部に公開(kāi)されます。
最後に、クライアントは、ローカル インターフェイスと既知の名前 (rmiregistry によって公開(kāi)される名前) を介して RMIService から実裝クラスを取得し、Naming/Context/Registry および RMI が提供する他のクラスのルックアップ メソッドを使用します。このように、ローカルにはこのクラスの実裝クラスはありませんが、すべてのメソッドがインターフェイス內(nèi)にあり、オブジェクトのメソッドをリモートから呼び出すことができます。

スタブとバックボーン ネットワーク間の具體的な通信プロセス:

Java RMI リモート呼び出し手順の分析

メソッド呼び出しは、クライアント オブジェクトからスタブとリモート経由で行われます。參照層 (リモート參照層) とトランスポート層 (トランスポート層) を下方向に通過(guò)し、ホストに渡され、再度トランスポート層を通過(guò)し、リモート呼び出し層とバックボーン ネットワーク (スケルトン) を上方向に通過(guò)して、サーバー オブジェクトに到達(dá)します。
スタブはリモート サーバー オブジェクトのプロキシとして機(jī)能し、クライアントがオブジェクトをアクティブ化できるようにします。
リモート參照層はセマンティクスを処理し、単一または複數(shù)のオブジェクトの通信を管理し、呼び出しを 1 つのサーバーに送信するか複數(shù)のサーバーに送信するかを決定します。
トランスポート層は実際の接続を管理し、メソッド呼び出しを受け入れることができるリモート オブジェクトを追跡します。
バックボーン ネットワークは、サーバー オブジェクトへの実際のメソッド呼び出しを完了し、戻り値を取得します。
戻り値は、リモート參照層とサーバー側(cè)のトランスポート層を介してクライアントに戻され、その後、トランスポート層とリモート呼び出し層を介して上向きに返されます。最後に、スタブは戻り値を取得します。

JAVA RMI の簡(jiǎn)単な例

この例は、サーバー側(cè)のリモート オブジェクトを呼び出すクライアントの加算および減算メソッドです。具體的な手順は次のとおりです:
1. リモート インターフェイスの定義

import java.rmi.Remote;
import java.rmi.RemoteException;

/**
 * 必須繼承Remote接口。
 * 所有參數(shù)和返回類型必須序列化(因?yàn)橐W(wǎng)絡(luò)傳輸)。
 * 任意遠(yuǎn)程對(duì)象都必須實(shí)現(xiàn)此接口。
 * 只有遠(yuǎn)程接口中指定的方法可以被調(diào)用。
 */
public interface IRemoteMath extends Remote {

  	// 所有方法必須拋出RemoteException
	public double add(double a, double b) throws RemoteException;
	public double subtract(double a, double b) throws RemoteException;
	
}

(學(xué)習(xí)ビデオ共有: java ビデオ チュートリアル)

2. リモート インターフェイス実裝クラス

import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
import remote.IRemoteMath;

/**
 * 服務(wù)器端實(shí)現(xiàn)遠(yuǎn)程接口。
 * 必須繼承UnicastRemoteObject,以允許JVM創(chuàng)建遠(yuǎn)程的存根/代理。
 */
public class RemoteMath extends UnicastRemoteObject implements IRemoteMath {

	private int numberOfComputations;
	
	protected RemoteMath() throws RemoteException {
		numberOfComputations = 0;
	}
	
	@Override
	public double add(double a, double b) throws RemoteException {
		numberOfComputations++;
		System.out.println("Number of computations performed so far = " 
				+ numberOfComputations);
		return (a+b);
	}

	@Override
	public double subtract(double a, double b) throws RemoteException {
		numberOfComputations++;
		System.out.println("Number of computations performed so far = " 
				+ numberOfComputations);
		return (a-b);
	}

}

3. サーバー側(cè)

import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import remote.IRemoteMath;

/**
 * 創(chuàng)建RemoteMath類的實(shí)例并在rmiregistry中注冊(cè)。
 */
public class RMIServer {

	public static void main(String[] args)  {
		
		try {
			// 注冊(cè)遠(yuǎn)程對(duì)象,向客戶端提供遠(yuǎn)程對(duì)象服務(wù)。
			// 遠(yuǎn)程對(duì)象是在遠(yuǎn)程服務(wù)上創(chuàng)建的,你無(wú)法確切地知道遠(yuǎn)程服務(wù)器上的對(duì)象的名稱,
			// 但是,將遠(yuǎn)程對(duì)象注冊(cè)到RMI Registry之后,
			// 客戶端就可以通過(guò)RMI Registry請(qǐng)求到該遠(yuǎn)程服務(wù)對(duì)象的stub,
			// 利用stub代理就可以訪問(wèn)遠(yuǎn)程服務(wù)對(duì)象了。
			IRemoteMath remoteMath = new RemoteMath();  
			LocateRegistry.createRegistry(1099);    
			Registry registry = LocateRegistry.getRegistry();
			registry.bind("Compute", remoteMath);
			System.out.println("Math server ready");
			// 如果不想再讓該對(duì)象被繼續(xù)調(diào)用,使用下面一行
			// UnicastRemoteObject.unexportObject(remoteMath, false);
		} catch (Exception e) {
			e.printStackTrace();
		}		
		
	}
	
}

4. クライアント end

import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import remote.IRemoteMath;

public class MathClient {

	public static void main(String[] args) {
		
		try { 
			// 如果RMI Registry就在本地機(jī)器上,URL就是:rmi://localhost:1099/hello
			// 否則,URL就是:rmi://RMIService_IP:1099/hello
			Registry registry = LocateRegistry.getRegistry("localhost");        
			// 從Registry中檢索遠(yuǎn)程對(duì)象的存根/代理
			IRemoteMath remoteMath = (IRemoteMath)registry.lookup("Compute");
			// 調(diào)用遠(yuǎn)程對(duì)象的方法
			double addResult = remoteMath.add(5.0, 3.0);
			System.out.println("5.0 + 3.0 = " + addResult);
			double subResult = remoteMath.subtract(5.0, 3.0);
			System.out.println("5.0 - 3.0 = " + subResult);			
		}catch(Exception e) {
			e.printStackTrace();
		}
				
	}
	
}

の結(jié)果は次のとおりです:

server end

Java RMI リモート呼び出し手順の分析

#client end

Java RMI リモート呼び出し手順の分析

參照:

https://blog.csdn.net/xinghun_4/article/details/45787549

関連する推奨事項(xiàng):

Java 入門チュートリアル

以上がJava RMI リモート呼び出し手順の分析の詳細(xì)內(nèi)容です。詳細(xì)については、PHP 中國(guó)語(yǔ) Web サイトの他の関連記事を參照してください。

このウェブサイトの聲明
この記事の內(nèi)容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰屬します。このサイトは、それに相當(dāng)する法的責(zé)任を負(fù)いません。盜作または侵害の疑いのあるコンテンツを見(jiàn)つけた場(chǎng)合は、admin@php.cn までご連絡(luò)ください。

ホットAIツール

Undress AI Tool

Undress AI Tool

脫衣畫(huà)像を無(wú)料で

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード寫(xiě)真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

寫(xiě)真から衣服を削除するオンライン AI ツール。

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無(wú)料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡(jiǎn)単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無(wú)料のコードエディター

SublimeText3 中國(guó)語(yǔ)版

SublimeText3 中國(guó)語(yǔ)版

中國(guó)語(yǔ)版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強(qiáng)力な PHP 統(tǒng)合開(kāi)発環(huán)境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開(kāi)発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)