Goとある勉強会用にLTネタを作っていたのですが、発表できなくなったので腐る前にブログに書いておきます。元ネタは以下のツイートです。2018年1月17日LTのネタになりそうだったのでやってみたわけです。aws-lambda-goについてじゃあ、まあaws-lambda-goは一体どういう仕組みで動いているんだろうと、ソースを読んでみました。entry.goとfunction.goあたりでだいたい分かりましたが、net/rpcパッケージをつかってFunction#InvokeとFunction#Pingを呼んでいる感じでした。ミニマムなハンドラ必要なrpcのメソッドさえ実装すればaws-lambda-goがなくても動きます。削ってみて、ほぼ最小のコードは以下のようになりました。returned")}構造体のメンバを結構削っても、一応動くんですよね...ローカルでハンドラを動かすハンドラはrpcのメソッドを呼ばれてるだけなので、ローカルから実行することもできます。Goで動かすそれで本題なのですが、net/rpcパッケージはGoに特化しているとはいえ、シリアライズされたデータをネットワーク経由でやりとりしているので、やろうと思えばほかの言語とも通信ができるはずです。シリアライズにつかっているエンコーディングがgobで、さすがにこのエンコーダの他言語実装を見つけることはできませんでした。仕方ないので、net/rpcのサーバ・クライアント間にプロキシ立ててパケットをキャプチャして流れているデータを調べた上で、そのデータをそのまま返すようなサーバを作ってみました。Developerをほぼそのままコピーしています。飛んできたメッセージを無理矢理Stringにして「Ping」という文字が入っていたらPing用のデータ、それ以外のデータはInveke用のデータを返すようにしています。やったぜ!その他Goに特化したrpcに対応するなら、先にgRPCに対応してもよかったのでは...と思わなくもない。linkにしてません。(0x00007fee69b4f000)こんな感じでした。linkになるので、libcくらいは使えますね...と。バイナリデータをイベントとして送る以下のツイートが興味深かったので、ちょっと検証してみた。v0.7.6でignoreという属性をつけられるようにしたapexでrubyをデプロイするactive_record_mysql_xverifyaudit.logのパーサを書いた月別アーカイブはてなブログをはじめよう!winebarrelさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。