Skip to content

Instantly share code, notes, and snippets.

@kjunichi
Last active February 20, 2019 23:05
Show Gist options
  • Save kjunichi/d265edcb5fda79142d99c0bcd32c3471 to your computer and use it in GitHub Desktop.
Save kjunichi/d265edcb5fda79142d99c0bcd32c3471 to your computer and use it in GitHub Desktop.
2019/2/20

20190220

NAPI版のnode-ffiであるffi-napiを使った

普通に使えると思いきやNodObjCが動かなかった

Node.jsでgRPC

これまで

と複数のgRPCをつかったリポジトリを保有しているものの、 .protoファイルがHelloWorldを流用してやり過ごしていた。

今回一念発起して、独自の.protoファイルかつStreamをつかったgRPCにチャレンジした。

.protoを動的に扱ってくれるNode.jsで

.protoファイルを触るのは今回が初なので、.protoを動的に扱ってくれるNode.jsで クライアントもサーバも作成することにした。 というか、前回の記事の

Node.jsで作ったWebカメラの映像をターミナルに表示するアプリのクラサバ間通信を ソケット通信からgRPCに変更するということで、

gRPCでstreamを使うポイント

HelloWorldとともに公開されているRoute_guideのソースを見れば、大体わかる。 特にNode.js実装だと自分が慣れているのもあり、

  • サーバ側からstreamを返すパターン
  • クライアント側からstreamを送るパターン
  • クライアント、サーバともにstreamを送るパターン

のパターンがあり、これらのそれぞれのパターンに対応するメソッドがサンプルに 書かれている。

今回はクライアントからは通常のリクエスト、サーバ側からストリームというパターンで 作るのでサンプルの

function listFeatures(call) {

のメソッドを参考に作業を進めた。

勘違いしていたStream

自分の中にはストリームというとバイトストリームのイメージが強く、 JSONが分割して送信されると誤解していたが、 .protoファイルで定義したJSONがぼこぼこ返されるのだった。

ppm

はPPMファイルを適当にぶった切ってバイト列を

で送るものだと決めつけていたが、PPMファイルをまるまる一回の

で送ることが出来てしまった。

当初はgRPCでStream指定をしたら、gRPC側で適当に細切れにして、クライアントに送信することを 来していたが、裏でどうなっているかは知らないが、表面的なAPIとしては、 サーバで1個streamを送信したら、クライアント側で1個受け取れる模様。

クライアントからのリクエストを空にする子も可能 今回のアプリはWebカメラの画像を貰うだけなので、特にクライアントからサーバに渡すデータは 不要だったが、サンプルは何かしら入れているので、どうしたものかと一瞬悩んだが、

という指定で.protoファイルを作ることが出来たので、スッキリした。

作業をしてい気になった事

サーバ側で、Webカメラの映像が安定することを期待してウェイトを入れているが、 これがどの程度長くしても怒られないのか、また、怒られる場合は、gRPCのタイムアウト になるのだろうか。

関連

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment