Skip to content

📲クライアントとサーバで異なるプログラミング言語で書かれていても、クライアントプログラムがサーバ上の機能を呼び出せるシステム

Notifications You must be signed in to change notification settings

Aki158/Remote-Procedure-Call

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

15 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Remote-Procedure-Call

🌱概要

クライアントとサーバで異なるプログラミング言語で書かれていても、クライアントプログラムがサーバ上の機能を呼び出せるシステム

✨デモ

output

📝説明

このシステムは、クライアントとサーバで異なるプログラミング言語で書かれていても、クライアントプログラムがサーバ上の機能を呼び出せるシステムです。

システムの実行には、ターミナルという黒い画面にコマンドを入力します。

このシステムでは、RPCの簡易的なシステムを体験することができます。

RPCとは、ネットワークを介して別々のコンピュータ上にあるプログラム間(異なるアドレス空間)で、同一コンピュータ内(ローカル)で機能の呼び出しを行っているかのように感じさせることができるプログラミング手法です。

RPCの実装には、下記のようなプログラミング言語を使用しています。

クライアント-サーバ プログラミング言語
クライアント JavaScript(Node.js)
サーバ Python

基本的な機能として、RPCのシステム/送受信されたデータの表示ができます。

補足

説明で登場する用語について補足します。

用語の意味がわからない時は、下記表を確認してください。

用語 意味
クライアント サーバに接続し、データの取得や処理の依頼などを行うプログラムやコンピュータシステムのことです。
サーバ ネットワークを介してクライアントの要求に応答し、データ、サービス、リソースを提供するシステムやソフトウェアのことです。
ターミナル コンピュータに対してテキストベースのコマンド入力と出力を行うインターフェースのことです。
このインターフェースは、コマンドラインインターフェース(CLI)とも呼ばれます。
デモで表示されている黒い画面のことです。
コマンド コンピュータに対して特定の操作を実行するよう指示するテキストベースの命令です。
コマンドを入力することで、コンピュータは、コマンドの意味を読み取りアクションをおこします。
RPC ネットワークを介して別々のコンピュータ上にあるプログラム間(異なるアドレス空間)で、同一コンピュータ内(ローカル)で呼び出しを行っているかのように感じさせることができるプログラミング手法です。

🧰前提条件

このシステムを実行するには、下記ソフトウェアを事前にインストールしておく必要があります。

インストールされていない場合は、インストール/使用方法/使用例で記載されているコマンドが実行できませんので

必ずインストールしてから進めてください。

Git

Gitがインストールされていない場合は、下記手順でインストールしてください。

  1. ターミナルを起動する。
    使用するOSによりターミナルの名称が異なりますので注意してください。
    (例. Windows:コマンドプロンプト,mac:ターミナル)

  2. Gitがインストールされているか確認する。
    git version 2.34.1 のように表示された場合は、Gitがインストールされています。
    以降の手順はスキップしてください。
    また、ターミナルは引き続き使用しますので開いたままにしてください!

git --version
  1. システムを更新する
sudo apt-get update
  1. Gitをインストールする
sudo apt install git
  1. Gitがインストールされたことを確認する。
    git version 2.34.1 のように表示されていれば、Gitのインストールは完了です!
git --version

Python 3.x

Pythonの公式サイトからあなたのPCのOSに合わせて、ダウンロードしてください。

ダウンロードしたファイルを使用してインストールできます。

Pythonがインストールされているかは、下記コマンドで確認することができます。

Python 3.10.12のように表示されていれば、Pythonはインストールされています。

python3 --version

Node.js

Node.jsは、JavaScript実行環境の1つです。

Node.jsのインストールについては、UbuntuへのNode.jsのインストールにわかりやすく解説してありましたので確認してください。

また、Node.jsについて詳しく知りたい場合は、Japan Node.js Associationを確認してください。

🍴インストール

クローン

このシステムをあなたのPCで実行するために、クローンします。

クローンとは、このシステムの実行に必要なファイル(リポジトリのコンテンツ)をあなたのPCのローカル環境へコピーすることです。

下記手順でクローンしてください。

  1. リポジトリをクローンする
git clone https://github.com/Aki158/Remote-Procedure-Call.git
  1. クローンしたリポジトリへ移動する
cd Remote-Procedure-Call

🚀使用方法

  1. 1つ目のターミナル(サーバ用ターミナルとする)を起動する
  2. サーバ用ターミナルに下記コマンドを入力する
python3 server.py
  1. 2つ目のターミナル(クライアント用ターミナルとする)を起動する
  2. クライアント用ターミナルに下記コマンドを入力する
node client.py
  1. クライアント用ターミナルに0から6までの数字を入力し送信する
  2. クライアントが送信した数字をもとに、サーバ用ターミナルにデータが表示される
  3. サーバ用ターミナルが関数の実行結果を送信し、クライアント用ターミナルにメッセージが表示される。

🙋使用例

一通りの手順のイメージはデモを参考にしてください。

  1. 1つ目のターミナル(サーバ用ターミナルとする)を起動する
  2. サーバ用ターミナルに下記コマンドを入力する
python3 server.py
  1. 2つ目のターミナル(クライアント用ターミナルとする)を起動する
  2. クライアント用ターミナルに下記コマンドを入力する
node client.py
  1. クライアント用ターミナルに0から6までの数字を入力し送信する。
    0から6までの数字は、RPCの入出力表の入力部分に該当します。
    今回は、0を入力しました。
  2. クライアントが送信した数字をもとに、サーバ用ターミナルにデータが表示される。
    入力した0に紐づくデータが表示されました。
  3. サーバ用ターミナルが関数の実行結果を送信し、クライアント用ターミナルにメッセージが表示される。
    クライアント用ターミナルに実行結果が表示されました。

💾使用技術

カテゴリ 技術スタック
開発言語 JavaScript(Node.js)
Python
インフラ Ubuntu
VirtualBox
その他 Git
Github

👀機能一覧

image

機能 内容
メッセージの表示 送受信されたメッセージを表示します。
クライアント ユーザーから入力された数字を受け取り、その入力と紐づくデータへ変換します。
その後、サーバーに送信します。
また、サーバからのメッセージを受信します。
サーバ クライアントからデータを受け取ります。
受け取ったデータをもとに、実行する関数を判断します。
関数の実行結果を応答としてクライアントに送り返します。
エラーハンドリング サーバが、クライアントから不適切なデータを受け取った場合は、下記のように表示します。
・サーバが期待している型とparam_typesが異なる場合:Invalid parameter
・methodの名前が見つからない場合:Function not found

RPCの入出力表

入力 入力に紐づくデータ 出力
0 {
"method":"floor",
"params":5.345,
"param_types":"double",
"id":0
}
{
"results": "5",
"result_type": "int",
"id": 0
}
1 {
"method":"nroot",
"params":[3,8],
"param_types":"[int,int]",
"id":1
}
{
"results": "2.0",
"result_type": "double",
"id": 1
}
2 {
"method":"reverse",
"params":"hello",
"param_types":"string",
"id":2
}
{
"results": "olleh",
"result_type": "str",
"id": 2
}
3 {
"method":"validAnagram",
"params":["anagram","ano grew"],
"param_types":"[string,string]",
"id":3
}
{
"results": "False",
"result_type": "bool",
"id": 3
}
4 {
"method":"sort",
"params":["Nice","to","meet","you"],
"param_types":"string[]",
"id":4
}
{
"results": "['Nice', 'meet', 'to', 'you']",
"result_type": "list",
"id": 4
}
5 {
"method":"floor",
"params":5.345,
"param_types":"float",
"id":5
}
Invalid parameter
6 {
"method":"subtract",
"params":[42,23],
"param_types":"[int,int]",
"id":6
}
Function not found

📮今後の実装したいもの

  • ユーザーが自由に入力できるようにする

📑参考文献

公式ドキュメント

参考にしたサイト

About

📲クライアントとサーバで異なるプログラミング言語で書かれていても、クライアントプログラムがサーバ上の機能を呼び出せるシステム

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published