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 ,而不是日期

  • 相关阅读:
    Python之Pyautogui模块20180125《PYTHON快速上手让繁琐的工作自动化》18章
    〈Android 群英传-神兵利器〉第7章一个的寂寞与一群人的狂欢
    一,Android Studio笔记
    一、探索 Android Studio
    微服务之网关:Ocelot+Consul实现动态集群扩展
    MacOS任意降级
    微服务之注册服务与发现:Consul在Windows下安装使用
    .Net Core中使用 AutoMapper
    .Net Core中使用Swagger
    .NetCore中使用EF Core
  • 原文地址:https://www.cnblogs.com/wang2650/p/4953872.html
Copyright © 2011-2022 走看看