今天,有介绍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 ,而不是日期

akka 练手 原来第一次是原封不动的返回传出去的参数的更多相关文章

  1. 别再说找不到Python练手项目了,这80个拿去过冬

    开头真的很重要!!!一个吻,一部小说,一篇文章......好的开头就像一个漂亮女孩的问候,问完了,你还期待着她接下来会对你说些什么甜蜜的话呢. 真可惜!我不是漂亮女孩,我的这个开头也不好.但开头不好, ...

  2. 10个Python基础练习项目,你可能不会想到练手教程还这么有趣

    美国20世纪最重要的实用主义哲学家约翰·杜威提出一个学习方法,叫做:Learning By Doing,在实践中精进.胡适.陶行知.张伯苓.蒋梦麟等都曾是他的学生,杜威的哲学也影响了蔡元培.晏阳初等人 ...

  3. 10个有趣的Python教程,附视频讲解+练手项目。

    从前的日色变得慢,车.马.邮件都慢 一生只够爱一门编程语言 从前的教程也好看,画面精美有样子 你看了,立马就懂了 Python最性感的地方,就在于它的趣味性和前沿性,学习Python,你总能像科技节的 ...

  4. 面向对象第一次练手-------ArrayList集合、类、对象、冒泡排序、类型转换

    思维转不过弯儿来  怎么做都是错      哪怕差一个()就成功的事情,也是千差万别 忽然想到一句话:差一步就成功的距离  =  差几万米就成功的距离 部分的理解和都体现在代码和注释里 using S ...

  5. Python练手之爬虫

    很久没更新博客了,最近自学Python,写个在百度上爬算法题题解的爬虫,第一次写爬虫..纯当练手 慢慢来.. #coding:utf-8 ''' Created on 2016年11月22日 @aut ...

  6. jQuery练手:仿新浪微博图片文字列表淡进淡出上下滚动效果

    1.效果及功能说明 仿新浪微博图片文字列表上下淡进淡出间歇上下滚动 2.实现原理 首先要设定div内只能显示4个图片那么多出来的图片会自动隐藏然后在给图片添加一个动画的事件让他们可以滚动的播放出来上下 ...

  7. Python练手项目实例汇总(附源码下载)

    今天给大家分享几个有趣的Python练手项目实例,希望对Python初学者有帮助哈~ 一.经典的俄罗斯方块   1. 绑定功能 1 # 绑定功能 2 class App(Frame): 3 def _ ...

  8. Python学习路径及练手项目合集

    Python学习路径及练手项目合集 https://zhuanlan.zhihu.com/p/23561159

  9. Cocos2d-Lua (练手) 微信打飞机

    学习下lua,目前入门级,使用版本为 v3.3 Final For Win,空闲时间不足,只能断断续续写点东西.   一.子弹效果          子弹只做了一种,扇形发射,可以增加扇形大小,子弹的 ...

随机推荐

  1. Windows常用内容渗透命令

    假设现在已经拥有一台内网[域]机器,取名X-007. 1-1.内网[域]信息收集 A.本机X-007信息收集. [+]------用户列表[Windows用户列表/邮件用户/...] ----> ...

  2. pythonNetday06

    进程 Process(target,name,args,kwargs) p.pid : 创建的新的进程的PID号 p.is_alive() 判断进程是否处于alive状态 p.daemon = Tru ...

  3. php利用curl实现多进程下载文件类

    批量下载文件一般使用循环的方式,逐一执行下载.但在带宽与服务器性能允许的情况下,使用多进程进行下载可以大大提高下载的效率.本文介绍PHP利用curl的多进程请求方法,实现多进程同时下载文件. 原理: ...

  4. ExtJS组件扩展

    1.extends 2.initComponent 3.constracot: 4.onRender:重新写这个方法 ========================================= ...

  5. 「小程序JAVA实战」小程序的横向视频和页面拦截(59)

    转自:https://idig8.com/2018/09/24/xiaochengxujavashizhanxiaochengxudehengxiangshipinheyemianlanjie58/ ...

  6. Angular2中Input和Output

    @Input @Input是用来定义模块的输入的,用来让父模块往子模块传递内容: @Output 子模块自定义一些event传递给父模块用@Output. 对于angular2中的Input和Outp ...

  7. VUE项目 - IE报vuex requires a Promise polyfill in this browser问题解决

    第一步: 安装 babel-polyfill . babel-polyfill可以模拟ES6使用的环境,可以使用ES6的所有新方法 npm install --save babel-polyfill ...

  8. 最值得学习阅读的10个C语言开源项目代码

    阅读优秀代码是提高开发人员修为的一种捷径-- 1. Webbench Webbench是一个在linux下使用的非常简单的网站压测工具.它使用fork()模拟多个客户端同时访问我们设定的URL,测试网 ...

  9. LUA 运行期间不独占线程的递归,通过回调实现

    function main(d) local function func(d) moveto(d, function() print("d=======", d) d = d - ...

  10. 记一次结巴分词.net core 2.0版 nuget发布过程

    最近用到分词考虑很久,选用了结巴分词,原因见博客Lucene.net(4.8.0) 学习问题记录五: JIEba分词和Lucene的结合,以及对分词器的思考 既然选好了,难就开始行动吧 . 查了.ne ...