天天看点

akka 练手 原来第一次是原封不动的返回传出去的参数

今天,有介绍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]

 联系我,非常感谢。