Akka Remoteを利用したServer, Clientの簡単なActor通信するサンプルで動作確認した

概要

akka remoteを使ったリモート間のActorプログラムに慣れるために、client -> server構成の単純なプログラムを作成して動作を確認した。

作成したプログラムは以下

github.com

動作環境

  • Windows 10 Pro 1709
    • JRE build 1.8.0_151-b12
  • scala 2.12.6
  • akka-actor 2.5.12
  • akka-remote 2.5.12

構成

  • メッセージを待ち受けるserverと、メッセージを送信するclientの2プロジェクト構成
  • serverとclientは別プロセスとする

f:id:hkou:20180512102432p:plain

動作シーケンス

  • client
    • serverのActorに対して一定時間間隔でメッセージを送信する
    • 最後にserverを停止するメッセージを送信する
  • server
    • メッセージ待受するActorを起動する
    • 受け付けたメッセージを標準出力に表示する

f:id:hkou:20180512104004p:plain

パケットキャプチャ

remote actorに対する通信を理解するためにパケットキャプチャを用いて通信の内容を確認する。
このサンプルプロジェクトはlocalhost環境で動かしている。WireSharkでは自マシン間での通信はキャプチャできない為、RawCapを利用した。

www.netresec.com

server起動

sbt 
project server
run

client起動

serverとは別のsbtで以下を実行する

sbt
project client
run

キャプチャ結果確認

RawCapは標準でpcap形式のファイルを出力するので、キャプチャ内容を確認するときはWireSharkを利用することができる。

f:id:hkou:20180512110621p:plain

  • 一度コネクションを張るとshutdownするまでずっとコネクションを維持し続ける
  • デフォルトでは4秒?毎にheart beatが投げられている
  • 小さいメッセージ(今回はString9文字程度)だとペイロードの大半がactor pathの情報が占めるように見える