grpc - Square/Google 合作設計的新的 http2 RPC 函式庫
(googledevelopers.blogspot.tw)
這玩意什麼都是用最新的:
- protobuff 3
- netty 5
- http2
而且有別於其他 google 專案,是用 gradle 來 build,這很不錯。
server 是用 netty:
private void start() throws Exception {
server = NettyServerBuilder.forPort(port)
.addService(GreeterGrpc.bindService(new GreeterImpl()))
.build().start();
}
Client 也是
public HelloWorldClient(String host, int port) {
channel =
NettyChannelBuilder.forAddress(host, port)
.negotiationType(NegotiationType.PLAINTEXT)
.build();
blockingStub = GreeterGrpc.newBlockingStub(channel);
}
Objective-C 的版本則還在開發中。這套成熟之後就不用苦哈哈的在 client server 間一直 mapping 那些 restful, JSON, POJO 這些煩人的事。
koji
積分 1
雖然就叫 rpc,但好奇 Bidirectional streaming RPC1 可以怎麼 read, write 玩法...
rpc RouteChat(stream RouteNote) returns (stream RouteNote) {}
我想只是變 streaming 而已,但不是真的可以拿來做 websocket 式的 chatting。
如果沒有 async streaming,本來 API 會是這樣:
List<Feature> routeAll(List<Point> points)
傳進傳出都是 batch 式的整包。而改成 streaming 就是上面的 collection 可以每個 item 分開傳進與傳回,慢慢一點一點傳,有點像是:
//psuedo code, 不是真的 grpc
Stream<Feature> routeAll(Stream<Point> points)
變成可以非同步且 pipeline。不過本質上還是一個 routeAll()
這樣的一個 remote call。
看這 API 實在是用起來很醜,而且很像 RxJava。
偏偏那個 StreamObserver 得用 anonymous class 來寫。這些人設計新 API 都不考慮 Java8 的 lambda 啊,可以用 lambda 哪會設計成這樣…