Code Monkey home page Code Monkey logo

remote-procedure-call's Introduction

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

📜作成の経緯

⭐️後で記載する!!!

作成した理由を記載する。

⭐️こだわった点

⭐️後で記載する!!!

テキストや参考にした記事などを再度読み返して技術の理解を深めてから書く。

ここがエンジニアに一番読んでもらいたい箇所なのでできるだけ詳細に書く。


【使えるかもしれない素材】

TCP通信を用いてクライアント、サーバ間でのデータ送受信(JSON形式)を行います。

クライアントは、Javascript(Node.js)、サーバはpythonを使用しRPCのシステムを実装しています。


📮今後の実装したいもの

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

📑参考文献

公式ドキュメント

参考にしたサイト

remote-procedure-call's People

Contributors

aki158 avatar

Stargazers

kip2 avatar  avatar

Watchers

 avatar

Forkers

purin213

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.