zoukankan      html  css  js  c++  java
  • 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 ,而不是日期

  • 相关阅读:
    UOJ.26.[IOI2014]Game(交互 思路)
    Good Bye 2016 F.New Year and Finding Roots(交互)
    Codeforces.835E.The penguin's game(交互 按位统计 二分)
    Codeforces.744B.Hongcow's Game(交互 按位统计)
    Codeforces.862D.Mahmoud and Ehab and the binary string(交互 二分)
    正睿OI 提高 Day1T3 ZYB玩字符串(DP)
    划分vlan
    2三层交换机实现vlan间的路由
    交换机基础-交换机远程telnet
    自动化运维环境的搭建问题处理
  • 原文地址:https://www.cnblogs.com/wang2650/p/4953872.html
Copyright © 2011-2022 走看看