标签:style http io os ar for 数据 2014 sp
EC全称是elastic communication,是基于c#实现的Socket网络通讯服务容器,支持windows .Net和mono。通过EC容器可以让开发人员在不了解Socket网络通讯知识和不进行任何配置的情况即可把逻辑应用部署到一个网络通讯服务中。EC的目标让开发人员在编写传统Socket网络通讯服务的时候就象编写asp.net应用一样简单,只需要定义消息和控制器方法即可实施一个基于网络Socket通讯应用服务程序。
以下通过一个HelloWord例程来表述一下EC在这方面的简单灵活性;通过EC编写服务只需要从业务上来分析问题,分析一下场景先发起一个hello请求服务器,然后服务根据内容应答。
[MessageID(0x1)] [ProtoContract] public class Hello { [ProtoMember(1)] public string Name { get; set; } }
[Controller] public class Program { static void Main(string[] args) { ECServer.Open(); System.Threading.Thread.Sleep(-1); } public string HelloWord(ISession session,Hello e) { return string.Format("hello {0} [say time:{1}]", e.Name, DateTime.Now); } }
string result=mClient.Send<string>(new Hello { Name="henry" });
以上就是EC的HelloWord的完整实现,从整个实现过程中是完全不用关心网络方面的事情,也不用关心消息和控制器是如何由EC接管的,只需要执行ECServer.Open()方法服务即可启动;从易用性从上面的示例已经可以表述出来,以下讲述一下EC的整体结构。
EC的最表层Application由ECServer.Open()内部自行创建并启动,在Application下层主要有协议分析器PacketAnalyzer,消息处理中心MessageCenter,用户会话session和应用模块AppModel.
为了能实现可即用,EC针对protobuf提供默认的分析器,开发人员只需要通过protobuf规划定义消息即可挂载了EC容器中.协议结构如下:
协议定义比较简单byte[4]消息长度,消息主要分两大部分:消息类型(byte[2])和消息protobuf流.
如果用过asp.net mvc的朋友对Filter感觉应该不会陌生,由于EC也是基于控制器行为来处理消息,所以同样支持Filter功能.通过Filter可以方便统一地对所有请求进行验证,错误处理和日志跟踪等功能.
[Controller] public class Controller { [SkipFilter(typeof(LoginFilter))] [ThreadPool] public User Regisetr(ISession session, User user) { user.CreateTime = DateTime.Now; "Register invoke[Name:{0} Email:{1}]".Log4Debug(user.Name, user.EMail); return user; } [AdminFilter] public IList<User> Search(ISession session, Query query) { "Search invoke".Log4Debug(); List<User> users = new List<User>(); users.Add(new User()); users.Add(new User()); return users; } }
EC提供两种会话状态保存分别基于全局的applicatoin和连接的session.
application.MethodProcess += (o, e) => { //application e.Application["Path"] = @"c:\"; //sexxion e.Session["folder"] = "aaa"; };
EC同时支持Windows .net和mono并不需要根据不同平台配置或调整代码.
http://ec.ikende.com/files/file/HelloWord20140903095823.rar
标签:style http io os ar for 数据 2014 sp
原文地址:http://my.oschina.net/ikende/blog/317167