Akka.net 效能測試兼使用小技巧

瘋光無線發表於2019-01-18


最近想研究一下分散式開發,先拿了akka.net 跑一下效能

參考自己寫個網路實現,一般在本機通訊,300M每秒的傳輸率,作為參考

嗯,先說結果,用Akka.net直接發bytearray,最後也只有40M每秒的傳輸率。

所以高效能場合不適用。

另外akka.net remote 有個小小的問題

Akka.net 的 服務一側配置如下

remote {

dot-netty.tcp {

port = 8090

hostname = 0.0.0.0

}

}

此時縱有千般武藝你也不可能連的進來

因為

Akka.net 有一個類似http的跨域設計,你客戶端請求地址如下

"akka.tcp://server@10.1.1.176:8090/user/Echo";

你不可能用0.0.0.0 做請求地址吧。

就算 從服務一側 指定 public_hostname 還是有一個問題

一個伺服器只能對應一個域名

這在除錯時非常不便,我有一個服務。

我就想

"akka.tcp://server@127.0.0.1:8090/user/Echo";

"akka.tcp://server@localhost:8090/user/Echo";

"akka.tcp://server@10.1.1.176:8090/user/Echo";

這三種方式都能訪問

現在的akka是做不到的,除非你用我這個辦法

static void AddAkkaRemoteHost(ActorSystem system, string[] morehost = null)

{

var ext = system as ExtendedActorSystem;

IRemoteActorRefProvider provider = ext.Provider as IRemoteActorRefProvider;

var addrs = provider.Transport.Addresses;

var addrslist = addrs.GetEnumerator();

addrslist.MoveNext();

Address first = addrslist.Current;

if (first.Host != "localhost")

addrs.Add(new Address(first.Protocol, first.System, "localhost", first.Port));

if (first.Host != "127.0.0.1")

addrs.Add(new Address(first.Protocol, first.System, "127.0.0.1", first.Port));

if (morehost != null)

{

foreach (var host in morehost)

{

if (first.Host != host)

addrs.Add(new Address(first.Protocol, first.System, host, first.Port));

}

}

}

using (var system = ActorSystem.Create("server", config))

{

AddAkkaRemoteHost(system, new string[] { "10.1.1.176" });

system.ActorOf(

Props.Create(

() => new ChatServerActor()

)

, "Echo"

);

Console.ReadKey();

}


你能從這裡獲取程式碼

https://github.com/lightszero/akka.learn

相關文章