文档章节

零配置socket消息通讯容器EC

泥水佬
 泥水佬
发布于 2014/09/22 21:57
字数 826
阅读 201
收藏 4

        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结构


        EC的最表层Application由ECServer.Open()内部自行创建并启动,在Application下层主要有协议分析器PacketAnalyzer,消息处理中心MessageCenter,用户会话session和应用模块AppModel.

  • PacketAnalyzer
     协议分析器,主要用于网络流数据和消息对象转换的定义;为了方便应用EC内置集成了protobuf的协议分析器,后面会介绍这个协议的规范.
  • MessageCenter
     消息处理中心,主要用于消息控制器分发和执行.

协议

        为了能实现可即用,EC针对protobuf提供默认的分析器,开发人员只需要通过protobuf规划定义消息即可挂载了EC容器中.协议结构如下:

        

        协议定义比较简单byte[4]消息长度,消息主要分两大部分:消息类型(byte[2])和消息protobuf流.

Filter

        如果用过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并不需要根据不同平台配置或调整代码.

HelloWord下载

  http://ec.ikende.com/files/file/HelloWord20140903095823.rar

   下载更多的例程代码

 


© 著作权归作者所有

泥水佬

泥水佬

粉丝 72
博文 91
码字总数 60737
作品 7
广州
架构师
私信 提问
【转】Java 200+ 面试题补充② Netty 模块

本文是前文《Java 最常见的 200+ 面试题》的第二个补充模块,第一模块为:《Java 200+ 面试题补充 ThreadLocal 模块》。 1.Netty 是什么? Netty 是一款基于 NIO(Nonblocking I/O,非阻塞I...

Jinlong_Xu
03/08
0
0
轻易实现基于linux或win运行的聊天服务端程序

对于不了解网络编程的开发人员来说,编写一个良好的服务端通讯程序是一件比较麻烦的事情.然而通过EC这个免费组件你可以非常简单地构建一个基于linux或win部署运行的网络服务程序.这种便利性完...

泥水佬
2014/10/19
0
1
跨平台开源通讯组件elastic communication

    elastic communication是基于c#开发支持.net和mono的通讯组件(简称EC),EC的主要目的简化mono和.net下的通讯开发难度,通过EC可以非常快速地开发基于mono和.net的通讯交互应用。E...

泥水佬
2015/12/01
617
0
Java 200+ 面试题补充② Netty 模块

让我们每天都能看到自己的进步。老王带你打造最全的 Java 面试清单,认真把一件事做到最好。 本文是前文《Java 最常见的 200+ 面试题》的第二个补充模块,第一模块为:《Java 200+ 面试题补充...

王磊的博客
03/08
0
0
一个RPC服务客户端代理中间件的设计过程的回顾

一个RPC服务客户端代理中间件的设计过程的回顾 0 前言 近两年来,负责重新设计和开发一组RPC服务调用的中间件的通讯模块,包括RPC服务端模块(RPC服务容器I/O通讯模块),以及一个RPC客户端代...

先进哥
2016/06/05
114
0

没有更多内容

加载失败,请刷新页面

加载更多

Jenkins系列_插件安装及报错处理

进入Jenkins之后我们可以进行插件的安装,插件管理位于以下模块: 发现上面报了一堆错误,是因为插件的依赖没有安装好,那么这一节,就先把这些错误解决掉吧。解决完成后,也就基本会使用插件...

shzwork
今天
2
0
mysql mysql的所有查询语句和聚合函数(整理一下,忘记了可以随时看看)

查询所有字段 select * from 表名; 查询自定字段 select 字段名 from 表名; 查询指定数据 select * from 表名 where 条件; 带关键字IN的查询 select * from 表名 where 条件 [not] in(元素...

edison_kwok
昨天
9
0
多线程同时加载缓存实现

import com.google.common.cache.Cache;import com.google.common.cache.CacheBuilder;import java.util.concurrent.ExecutionException;import java.util.concurrent.ExecutorServi......

暗中观察
昨天
3
0
利用VisualVM 内存查看

准备工作,建几个测试类。等下就是要查看这几个类里面的属性 package visualvm;public class MultiObject { private String str; private int i; MultiObject(String str...

冷基
昨天
2
0
组装一台工作游戏两用机

一、配置清单如下: 分类 项目 价格(元) 主板 华硕(ASUS)TUF Z370-PLUS GAMING II 电竞特工 Z370二代 支持9代CPU 1049 CPU 英特尔(Intel) i7 8700K 酷睿六核 盒装CPU处理器 2640 风扇 九...

mbzhong
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部