ページの作成
親となるページを選択してください。
ページは必ず何かしらの親ページに紐づきます。親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
テンプレート
- Ban dang tim kiem dia chi in an gia re va uy tin tai Ha Noi
- POPULLAR MOVIE
- POPULLAR MOVIE
- GK
- Dich vu in an sang tao doc dao an tuong
- Dich vu in an sang tao doc dao an tuong
- エラー
- コード+ヘッダ
- コード
- Paige
- T N lu
- Genia Begay
- Diego Herz
- Indira Tubbs
- Kfo M
- Muoi Crowe
- adwords zertifizierte agentur
- Charlie Ricker
- Jrfpgxn
- J Xwkzgg b Pzg
- Maryam
- Matt Aplin
※執筆中
公式のクイックスタートの詳しい解説をします。
要インストール
-
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 |
人気パソコン・周辺機器はこちら
人気ページ
最近更新/作成されたページ
- Tc Lottery Hack (2024-09-06 20:03:21)
- nuochoa (2024-08-28 18:19:42)
- 指定された名前のソリューションファイルが既に存在するため、ソリューション名を変更できません (2024-08-22 12:39:28)
- Ban dang tim kiem dia chi in an gia re va uy tin tai Ha Noi (2024-08-16 22:31:51)
- Mahipalpur Call Girls (2024-07-10 14:24:48)
- Tem Chống Hàng Giả - Lựa Chọn Tối Ưu Cho Doanh Nghiệp Trong Thời Đại Mới (2024-07-03 18:51:13)
- kinh can (2024-06-26 23:37:53)
- HannahSenfa (2024-06-22 12:45:47)
- Longines L2.628.4.77.6 (2024-06-22 00:54:23)
- G-SHOCK DW-6900BB-1DR (2024-06-14 22:36:47)
最近コメントのあったページ
- Google Cloud Platformの使い方 (2024-09-29 20:52:01)
- SEO (2024-08-06 22:04:48)
- データベース (2024-08-06 11:27:36)
- プロジェクトの作成と削除 (2024-08-01 07:24:55)
- プロジェクトの作成と削除 (2024-08-01 07:21:34)
- プロジェクトの作成と削除 (2024-07-25 13:22:19)
- プロジェクトの作成と削除 (2024-07-25 12:05:39)
- プロジェクトの作成と削除 (2024-07-22 08:08:51)
- プロジェクトの作成と削除 (2024-07-18 11:48:10)
- プロジェクトの作成と削除 (2024-07-18 10:42:03)
最近の質問
- mmlmlmlmnok (2024-10-09 16:09:38)
- Factual information supported by reputable sources (2024-05-16 18:31:57)
- 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)
コメントを削除してもよろしいでしょうか?
コメントがありません