4
grpc - Square/Google 合作設計的新的 http2 RPC 函式庫 (googledevelopers.blogspot.tw)
IngramChen 積分 1 編輯於

這玩意什麼都是用最新的:

  • 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 這些煩人的事。

project 首頁1, github grpc2, square 新聞稿3

koji 積分 1
雖然就叫 rpc,但好奇 Bidirectional streaming RPC1 可以怎麼 read, write 玩法...
rpc RouteChat(stream RouteNote) returns (stream RouteNote) {}
IngramChen 積分 0 編輯於

我想只是變 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。

IngramChen 積分 0 編輯於

看這 API 實在是用起來很醜,而且很像 RxJava。

偏偏那個 StreamObserver 得用 anonymous class 來寫。這些人設計新 API 都不考慮 Java8 的 lambda 啊,可以用 lambda 哪會設計成這樣…

IngramChen 積分 0

Oh! shit!

什麼都支援了,就是不支援 browser! 搞屁啊