上次簡單介紹了grpc的使用方法,並建立了乙個方法呼叫,在grpc中有四種服務型別,下面分別進行介紹
這就是一般的rpc呼叫,乙個請求物件對應乙個返回物件
proto語法:
rpc ******hello
(person)
returns
(result)
{}service**
@override
public
void
******hello
(protoobj.person request,
io.grpc.stub.streamobserverresponseobserver)
client**
@test
public
void
******
()throws interruptedexception
輸出---****** rpc---
hello, world
乙個請求物件,服務端可以傳回多個結果物件
proto語法
rpc serverstreamhello(person) returns (stream result) {}
service**
@override
public
void
serverstreamhello(protoobj.person request,
io.grpc.stub.streamobserverresponseobserver)
client**
@test
public
void
serverstream()
channel.shutdown();}輸出
---server stream rpc---
string: "hello, world"
string: "hello2, world"
string: "hello3, world"
客戶端傳入多個請求物件,服務端返回乙個響應結果
proto語法
rpc clientstreamhello
(stream person)
returns
(result)
{}service**
@override
public io.grpc.stub.streamobserverclientstreamhello(
final io.grpc.stub.streamobserverresponseobserver)
@override
public
void
onerror
(throwable t)
@override
public
void
oncompleted
() };
}client**
@test
public
void
clientstream
()throws interruptedexception
@override
public
void
onerror
(throwable t)
@override
public
void
oncompleted
() };
streamobserverclientstreamobserver = asyncstub.clientstreamhello(responseobserver);
clientstreamobserver.onnext(protoobj.person.newbuilder().setmyname("world").build());
clientstreamobserver.onnext(protoobj.person.newbuilder().setmyname("world2").build());
clientstreamobserver.oncompleted();
//由於是非同步獲得結果,所以sleep一秒
thread.sleep(1000);}輸出
---client stream rpc---
client stream--hello,world,world2
結合客戶端流式rpc和服務端流式rpc,可以傳入多個物件,返回多個響應物件
proto語法
rpc bistreamhello
(stream person)
returns
(stream result)
{}service**
@override
public io.grpc.stub.streamobserverbistreamhello(
final io.grpc.stub.streamobserverresponseobserver)
@override
public
void
onerror
(throwable t)
@override
public
void
oncompleted
() };
}client**
@test
public
void
bidirectstream
()throws interruptedexception
@override
public
void
onerror
(throwable t)
@override
public
void
oncompleted
() };
streamobserverbistreamobserver=asyncstub.bistreamhello(responseobserver);
bistreamobserver.onnext(protoobj.person.newbuilder().setmyname("world").build());
bistreamobserver.onnext(protoobj.person.newbuilder().setmyname("world2").build());
bistreamobserver.oncompleted();
//由於是非同步獲得結果,所以sleep一秒
thread.sleep(1000);}輸出
---bidirectional stream rpc---
bidirectional stream--hello2, world
bidirectional stream--hello3, world
bidirectional stream--hello2, world2
bidirectional stream--hello3, world2
grpc通過使用流式的方式,返回/接受多個例項可以用於類似不定長陣列的入參和出參 gRPC的四種呼叫方式
普通rpc呼叫,客戶端帶乙個請求物件進行呼叫,服務端返回乙個響應物件。syntax proto3 option csharp namespace grpcdemoservices package greet the greeting service definition.service greete...
四種容器型別
容器 collection 變數 值 一般程式語言都會設計儲存多個值的儲存方式 類似於c語言裡的陣列 容器分為四種型別 list 列表 鍊錶的實現 將幾塊不連續的記憶體聯絡起來 set 集合 tuple 元組 dict 字典 1.列表 list 是一種鍊錶的實現。列表的定義 可以儲存任意型別,不止數...
四種引用型別
在 j a 中最常見的就是強引用,把乙個物件賦給乙個引用變數,這個引用變數就是乙個強引用。當乙個物件被強引用變數引用時,它處於可達狀態,它是不可能被垃圾 機制 的,即使該物件以後永遠都不會被用到 jvm 也不會 因此強引用是造成 j a 記憶體洩漏的主要原因之一。軟引用需要用 softreferen...