Cap'n ProtoのタイムトラベルRPC
時間を越えるのでProtocolBuffersより∞倍速いとのこと。
ジョークかと思いきや、遅延評価的にRPCを効率化する仕組みらしい。
以下は英語もサンプルもろくに読まずに「こういうものかなぁ」と想像したもの。
メールサーバから最新の1通だけ取得して表示するコード。
# ログインする mailer = Mailer.login("example.net", "id", "password") # 受信箱にあるメール数を取得する size = mailer.size("inbox") # 最新の1通を取得する value = mailer.get("inbox", size-1) # 表示する print value
3回のリクエスト & レスポンスが行われる。片道100ms掛かるとしたら600ms。
タイムトラベルRPCを導入すると、これを最短で200msに短縮できる。
コードは同じ。
# バックグラウンドでログイン処理のリクエストを開始する。 # レスポンスを待たないのですぐに返る。 # 返されるのはリクエスト処理を識別するオブジェクト。 mailer = Mailer.login("example.net", "id", "password") # 「mailerで識別される処理のレスポンスに対し、 # sizeメソッドを引数 "inbox" で呼べ」というリクエストを開始する。 size = mailer.size("inbox") # 「mailerで識別される処理のレスポンスに対し、 # getメソッドを # 第1引数は "inbox" # 第2引数は 変数sizeで識別される処理のレスポンス # から1を引いた値 # で呼べ # 」というリクエストを開始する。 value = mailer.get("inbox", size-1) # この位置まで通信待ちは一切発生しない。 # サーバサイドでlogin処理が終わり、その結果を使ったsize処理、get処理が順に完了し、 # レスポンスが返ってくるのを待って、表示する。 print value
これはこれで実現可能だと思うけど、翻訳とかじゃなくて本当にただの想像だから、全然違うものだったらごめんね。
誰かがまともな解説を書いてくれると思います。