ページの作成
親となるページを選択してください。
ページは必ず何かしらの親ページに紐づきます。親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
※執筆中
公式のクイックスタートの詳しい解説をします。
要インストール
-
Goプラグライン
$ go install google.golang.org/protobuf/cmd/protoc-gen-go@v1.28 $ go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@v1.2 |
※「protoc」コマンドをターミナル / コマンドプロンプトで実行できるようにPATHを通してください。(OS毎に操作が異なるので省略します)
サンプルコードの入手
以下のコマンドでサンプルコードを入手しましょう。
$ git clone -b v1.59.0 --depth 1 https://github.com/grpc/grpc-go |
基本的の以下の「helloworld」プロジェクトしか使用しませんので移動しましょう。
$ cd grpc-go/examples/helloworld |
サンプルアプリの実行
とりあえずサンプルアプリを動かしてみましょう。
詳細の解説は後程。
まずはサーバー側を起動します。
$ go run greeter_server/main.go |
続けて同じくターミナル / コマンドプロンプトをもう一つ開き、クライアントを起動します。
$ go run greeter_client/main.go Greeting: Hello world |
上記のコマンドを実行すると、サーバー側のターミナルで「Received: world」と表示されれば成功です。
greeter_client/main.goの説明
var ( addr = flag.String("addr", "localhost:50051", "the address to connect to") name = flag.String("name", defaultName, "Name to greet") ) |
ここでは、コマンドライン引数として受け取るための変数 addr(サーバーアドレス)と name(挨拶する相手の名前)を定義しています。
flagパッケージは、コマンドライン引数を処理するためのGo言語の標準ライブラリです。このパッケージを使用することで、プログラムを実行する際にコマンドライン引数を指定できます。
flag.Parse() の呼び出しは、flag パッケージがコマンドライン引数を解釈し、各フラグの値を更新するために必要です。コマンドライン引数を解釈しないと、各フラグの値はデフォルトのままとなります。
※今回は引数なしで実行しているので、上記の2つ目の引数で指定されているデフォルト値である「localhost:50051」、「defaultName」が採用されます。
conn, err := grpc.Dial(*addr, grpc.WithTransportCredentials(insecure.NewCredentials())) if err != nil { log.Fatalf("did not connect: %v", err) } defer conn.Close() |
gRPCサーバーへの接続を確立します。
また、セキュリティ設定として insecure.NewCredentials() を使用しています。
grpc.Dial は、指定されたアドレスに対してgRPCサーバーへの接続を確立します。
c := pb.NewGreeterClient(conn) |
HelloWorldサービスのgRPCクライアントを作成します。
ctx, cancel := context.WithTimeout(context.Background(), time.Second) defer cancel() r, err := c.SayHello(ctx, &pb.HelloRequest{Name: *name}) if err != nil { log.Fatalf("could not greet: %v", err) } log.Printf("Greeting: %s", r.GetMessage()) |
サーバーに挨拶を要求して、その結果を出力します。context.WithTimeout を使用して、タイムアウトが発生した場合にコンテキストがキャンセルされるようにします。
このクライアントは、指定された名前でHelloWorldサービスに挨拶を送り、サーバーからの応答をログに出力します。
greeter_server/main.goの説明
以下のプログラムごとのコメントをまずざっくりご確認ください。
詳細は後述します。
// コマンドライン引数を処理するための変数 // HelloWorldサービスのgRPCサーバーを実装する構造体
// GreeterサービスのSayHelloメソッドの実装
// client側のmain.goの説明を参照 flag.Parse() |
このコードはgRPCを使用してHelloWorldサービスに対するサーバーを実装しており、コマンドライン引数からポート番号を指定してサーバーを起動します。※今回は引数がないのでデフォルト値です。
サーバーはクライアントからの挨拶リクエストを受け付け、応答として挨拶メッセージを返します。
lis, err := net.Listen("tcp", fmt.Sprintf(":%d", *port)) |
この行は、gRPCサーバーがリッスンするネットワークアドレスを設定しています。具体的には、TCPネットワークを指定し、指定されたポート番号で接続を受け入れるための net.Listener インターフェースを作成しています。
詳細を解説します:
-
fmt.Sprintf(":%d", *port) は、指定されたポート番号 *port を文字列に変換し、その後にコロン : を付け加えています。これにより、指定されたポート番号のTCPアドレスが作成されます。
-
net.Listen("tcp", ...) は、TCPネットワークを指定してリッスン用の net.Listener インターフェースを生成します。具体的には、指定されたTCPアドレスでクライアントからの接続を待ち受けるように設定されます。
-
lis, err := ... は、net.Listen の戻り値として得られる net.Listener インターフェースとエラーを取得します。エラーが発生した場合は、err にエラーが格納され、それに対処することができます。
したがって、この行全体で言えば、サーバーは指定されたポート番号でTCPアドレスをリッスンし、クライアントからの接続を待ち受ける net.Listener インターフェースを取得しています。
gRPC serviceの変更
gRPCサービスはプロトコルバッファを使って定義します。
クライアントからHelloRequestパラメータを受け取り、サーバからHelloReplyを返すSayHello() RPCメソッドがあり、そのメソッドが次のように定義されていることだけ知っていれば十分です。
「helloworld/helloworld.proto」のファイルを開いてみましょう。
以下のような記述があります。
// The greeting service definition. // The request message containing the user's name. // The response message containing the greetings |
新しく「SayHelloAgain()」を追加してみましょう。
// The greeting service definition. // The request message containing the user's name. // The response message containing the greetings |
gRPCコードの再生成
a |
a |
a |
a |
a |
人気ページ
最近更新/作成されたページ
- HuneoSinclair NEW! (2024-05-07 16:39:39)
- Có nên mua giày công sở nam giá rẻ? 5 Lưu ý cần biết NEW! (2024-05-06 16:23:42)
- Đồng hồ Baby-G BA-112-1ADR, lưu ý về thương hiệu: NEW! (2024-04-15 11:47:26)
- Top 5 Nuoc Hoa Huong Ruou Khien Nguoi Dung Say Me (2024-03-30 15:35:15)
- gooブログ(goo blog) | 無料でブログを作成 (2024-03-26 06:50:01)
- 【エラー】トップレベルのコントロールをコントロールに追加できません。 (2024-03-26 01:38:35)
- C# (2024-03-26 01:36:11)
- 【Visual Studio】 C#のForm自動生成時に「値が有効な範囲にありません」エラー (2024-03-26 01:34:48)
- C#のエラー一覧 (2024-03-26 01:34:22)
- Very hot One-way links: Monday, November 15 (2024-03-15 13:00:31)
最近コメントのあったページ
- プロジェクトの作成と削除 (2024-05-09 05:21:51)
- プロジェクトの作成と削除 (2024-05-09 00:15:41)
- プロジェクトの作成と削除 (2024-05-08 06:19:28)
- プロジェクトの作成と削除 (2024-05-08 05:46:41)
- プロジェクトの作成と削除 (2024-05-06 06:50:49)
- プロジェクトの作成と削除 (2024-05-05 05:08:57)
- プロジェクトの作成と削除 (2024-05-05 04:17:10)
- プロジェクトの作成と削除 (2024-05-02 18:04:02)
- プロジェクトの作成と削除 (2024-05-02 02:05:03)
- プロジェクトの作成と削除 (2024-04-29 15:09:21)
最近の質問
- How can MyAssignmentHelp UK assist students as an assignment helper? (2024-02-03 19:15:52)
- c.wiki (2023-09-14 10:51:04)
- $(document).ready(function() { ... ってなに? (2023-04-17 11:02:56)
- 質問です (2020-02-20 12:19:36)
- フリーランスの単価って高いですか? (2020-02-12 19:56:16)
- 情報系のaoを受けるつもりなんですが何かおすすめのソフトはありますか? (2020-02-12 19:54:22)
- test3 (2020-02-08 23:50:54)
- セレクトボックスのCSSのcontentで三角の部分が押せない (2019-07-03 13:06:10)
- GCPのwp-config.phpでpermission denied (2019-06-05 20:04:08)
- Spring FrameworkのEntityのカラム名の大文字小文字、アンスコについて (2019-02-01 07:13:49)
- PHP(Laravel)からPythonのプログラムを呼び出したいのですがどうすればよいでしょうか。 (2018-12-06 06:26:57)
- djangoを本番環境にデプロイしたいのですがどのレンタルサーバー or VPSサーバーがよいですか (2018-12-01 12:04:18)
- Django administrationのUsernameとPasswordについて (2018-11-30 11:55:20)
- Google Adsenseでアダルトコンテンツと誤認されてしまいました。 (2018-09-09 17:15:36)
- Google MapsをUnityで使用する方法&料金 (2018-08-28 02:37:26)
- Amazon PA-APIのSort=salesrankが効かない (2018-07-21 08:54:25)
- 楽観ロックと悲観ロックの違い (2018-01-11 05:05:33)
- レンタルサーバーって沢山ありますけどどこがいいでしょうか?AWSってどうなんですか? (2018-01-09 10:03:20)
- ディープラーニングのライブラリってどれがオススメですか? (2018-01-06 05:15:40)
- Webスクレイピングってどこまでが違法なんでしょうか? (2018-01-06 05:09:08)
- 人工知能(AI)、機械学習、ディープラーニングの違い (2018-01-06 02:40:44)
コメントを削除してもよろしいでしょうか?
コメントがありません