今天,有介绍akka的文章,就下了个源码的demo练手!
在TimeServer 这个实例中主要就2个文件
server端
static void Main(string[] args)
{
using (var system = ActorSystem.Create("TimeServer"))
{
Console.Title = "Server";
var server = system.ActorOf<TimeServerActor>("time");
Console.ReadLine();
Console.WriteLine("Shutting down...");
Console.WriteLine("Terminated");
}
}
public class TimeServerActor : TypedActor, IHandle<string>
{
private readonly ILoggingAdapter _log = Context.GetLogger();
public void Handle(string message)
{
if (message.ToLowerInvariant() == "gettime")
{
var time =DateTime.UtcNow.ToLongTimeString();
Sender.Tell(time, Self);
}
else
{
_log.Error("Invalid command: {0}", message);
var invalid = "Unrecognized command";
Sender.Tell(invalid, Self);
}
}
}
客户端
private static void Main(string[] args)
{
using (var system = ActorSystem.Create("TimeClient"))
{
var tmp = system.ActorSelection("akka.tcp://TimeServer@localhost:9391/user/time");
Console.Title = string.Format("TimeClient {0}", Process.GetCurrentProcess().Id);
var timeClient = system.ActorOf(Props.Create(() => new TimeClientActor(tmp)), "timeChecker");
var fiber = FiberFactory.CreateFiber(3);
while (!Program.IsShutdown)
{
fiber.Add(() =>
{
Thread.Sleep(3);
timeClient.Tell(Time);
});
}
Console.WriteLine("Connection closed.");
fiber.GracefulShutdown(TimeSpan.FromSeconds(1));
Console.ReadLine();
IsShutdown = true;
Console.WriteLine("Shutting down...");
Console.WriteLine("Terminated");
}
}
public class CheckTime { }
public class CheckTime2 { }
public static CheckTime Time = new CheckTime();
public static CheckTime2 Time2 = new CheckTime2();
public class TimeClientActor : TypedActor, IHandle<string>, IHandle<CheckTime>
{
private readonly ICanTell _timeServer;
public TimeClientActor(ICanTell timeServer)
{
_timeServer = timeServer;
}
public void Handle(string message)
{
Console.WriteLine(message);
}
public void Handle(CheckTime message)
{
_timeServer.Tell("gettime", Self);
}
}
测试的时候,一直不知道 客户端传入CheckTime 类型,服务器是如何处理的。
测试才知道,原来不论你第一次传的是什么类型数据,都会原封不动的返回给客户端。
例如 你第一次直接传入字符串 gettime ,服务器返回的是还是gettime ,而不是日期
作者:
过错出处:http://www.cnblogs.com/wang2650/
关于作者:net开发做的久而已。十余年时光虚度!
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。如有问题,可以邮件:[email protected]
联系我,非常感谢。