前言

前后历时三年,期间大量参考.Net Framework和Asp.net MVC源代码,写写删删再重构,组件如今更新到V1.5.x了。从原来的丑小鸭,变成今天拥有稳定和强大的tcp协议支持基础层,原生支持http、websocket、flash策略服务,以及内置可快速构建tcp通讯的fast协议,最重要的是可基于此组件,很方便开发自己定义的某种tcp上层协议服务器和客户端。如果有人以支持的功能多为荣,我却以支持的扩展性强为傲,从WebForm到MVC的 时候,被其可依赖注入、可Filter过滤器拦截、Modelbinding及反射执行Action等新颖的思想震撼了!现在很高兴在这个组件里也模仿和使用了这些思想。

组件的功能

1、tcp服务器抽象类和客户端抽象类,以及相关的流读写功能类,字节和位操作等功能类。所有基于tcp的标准协议和个人自定义协议的服务都基于此继承来开发,抽象类已实现很多最基础功能。
2、内置flash和silverlight策略服务类,支持继承重写部分功能。
3、内置http服务模块,编写http服务时风格习惯与Asp.Net MVC极其一致,只差不支持视图。
4、内置websocket服务模块,同时封装基于json的jsonWebsocket服务和客户端脚本,从IE6到Chrome的web双工通讯不再是梦,编写jsonWebsocket服务时风格习惯和MVC一致。
5、内置名为fast的自定义个人协议,开发.Net内部使用的系统,可无视通讯知识就能编写tcp双工服务,编写服务风格习惯和MVC一致,客户端不需额外编写。
6、内置也能在EF下使用的Model验证特性,编写各种服务时,Model验证不在是恶心的一坨占了半个函数的if。
7、功能强大的Filter,AOP思想可以在http、jsonWebsocket、fast服务编写时大显身手,淋漓尽致,日志、异常和权限验证变得如此简单。
8、依赖注入支持,可以替换默认的依赖解析提供着,比如使用Autofac等优秀的依赖注入提供者来减少耦合或生命周期管理,Filter也支持依赖注入。

框架理念

我觉得有时自己在tcp这块博客的相关看法和评论比较暴躁,有时想指责或找出别人的不足来突显自己在这领域一样,这个非常不好,但很多时应该还是比较平心气和的。但我比较反感问我这个和其他一些思想理念不一样的相关组件的比较结果,每个框架都有自己的理念,有些是不能比的,或比不出结果,就像MVC和MVVM,我说都好,我希望想用的人自己先理解,然后结合自己的需求,比较选择。我的理念是构建一个稳定的基础层,支持一些标准协议,可以带但不能只拘泥和局限于某种自定义协议(比如组件里的fast协议)。如果组件从头到尾都是一个自定义的协议,那它应该是一把专用钥匙,离开了这个锁就是废铁(如果协议推广很广泛了另说)。当然万能钥匙是不存在,但是当锁是别人的,看到了之后,能通过这个组件低成本把相应的钥匙给造出来,这便是我的理念。

组件的移植

组件不依赖于任何第三方库,目的是保证体积小,同时移植方便。默认实现的序列化在移植时可替换。
1、Mono编译不用修改任何代码;
2、.Net core移植想要修改少量代码,但不会影响到逻辑的修改,只是序列化相关的代码。

组件适用范围

如果你用过MVC,那么使用本组件你可以轻易地实现以下需求:
1、在所有常见的浏览器里实现双工通讯比如及时通知和及时聊天等,从此再也不觉得老板想在web中实现推送不是变态。
2、.Net下双工通讯项目,比wcf更简单,无需关注通讯知识。
3、混合协议中转服务,你可以构建一个支持多协议的服务,比如浏览器端使用http和websocket,手机端使用http,其他硬件使用一些自定义tcp协议,达到多端控制硬件的目的。
4、编写一些客户端,或一些其他服务,比如redis等的.Net驱动,或telnet服务器,或其他你自定义的协议。

源代码和DEMO

https://github.com/xljiulang/NetworkSocket

你可以拿DEMO稍微看一看,就知道怎么使用了。

后记

今年来写的博客很多都是这个组件里面的某一角,有些甚至看似没关系的一样,但都是组件里背后默默工作的对象。从没有这样完整简述过组件的面貌,因为觉得时期还未到,在设计Filter的时候,曾经完全模仿MVC4的Filter,由于不同协议的上下文不同,每个协议都得写貌合神离的Filter,就像MVC与WebApi的过滤器一样,相似却不一样,后来重构的时候,否定了原来这种Filter设计思想,开发一套通用的Filter基础,虽然模仿了也借鉴了,但如果不适合,也要敢于否定。篇幅有限,寥寥一文,无以提及所有方面,故捡几重要点贴于斯文。
 

化茧成蝶,开源NetWorkSocket通讯组件的更多相关文章

  1. 突破自我,开源NetWorkSocket通讯组件

    前言 在<化茧成蝶,开源NetWorkSocket通讯组件>发表之后,收到大家很多个star,在此感谢!更可贵的是,一些网友提出了许多好建议,经过一些时间的思考,决定将NetworkSoc ...

  2. 开源NetWorkSocket通讯组件

    开源NetWorkSocket通讯组件   前言 在<化茧成蝶,开源NetWorkSocket通讯组件>发表之后,收到大家很多个star,在此感谢!更可贵的是,一些网友提出了许多好建议,经 ...

  3. 公司管理系列--Facebook 如何化茧成蝶[转]

    拒绝传统,看 Facebook 如何以三大法宝化茧成蝶:人才吸引.工程师文化和项目开发流程   我将结合之前在Facebook的四年工作经验,介绍Facebook创新的管理方法以及整个工程文化形成的方 ...

  4. 二十七(序幕)、【开源】EFW框架破茧成蝶

    回<[开源]EFW框架系列文章索引>        EFW框架源代码下载V1.3:http://pan.baidu.com/s/1c0dADO0 EFW框架实例源代码下载:http://p ...

  5. 华为云BigData Pro解读: 鲲鹏云容器助力大数据破茧成蝶

    华为云鲲鹏云容器 见证BigData Pro蝶变之旅大数据之路顺应人类科技的进步而诞生,一直顺风顺水,不到20年时间,已渗透到社会生产和人们生活的方方面面,.然而,伴随着信息量的指数级增长,大数据也开 ...

  6. 跨平台开源通讯组件elastic communication

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

  7. Net Core开源通讯组件 SmartRoute

    Net Core开源通讯组件 SmartRoute(服务即集群) SmartRoute是基于Dotnet Core设计的可运行在linux和windows下的服务通讯组件,其设计理念是去中心化和零配置 ...

  8. 开源通讯组件ec

    跨平台开源通讯组件elastic communication elastic communication是基于c#开发支持.net和mono的通讯组件(简称EC),EC的主要目的简化mono和.net ...

  9. [重磅开源] 比SingleR更适合的websocket 即时通讯组件---ImCore开源了

    有感而发 为什么说 SignalR 不合适做 IM? IM 的特点必定是长连接,轮训的功能用不上. 因为它是双工通讯的设计,用hub.invoke发送命令给服务端处理业务,其他就和 ajax 差不多, ...

随机推荐

  1. 全站HTTPs,没那么简单

    “全站 HTTPs”俨然成了目前的热门话题,很多网站都在摩拳擦掌要实行全站 HTTPs.凑巧,我们(沪江)也在推行这个计划. 一开始大家想得都很简单,把证书购买了.配好了,相应的路径改一改,就没有问题 ...

  2. 调试2440 RAM拷贝至SDRAM遇到的问题

    汇编代码主要是初始化一些寄存器,关狗,初始化时钟,初始化存储管理器以便访问内存,然后将SoC上4k RAM数据拷贝至SDRAM,然后在SRAM里面运行,由于代码未正常跑起来,于是使用JLinkExe来 ...

  3. JavaWeb学习----Cookie实现记住密码的功能

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...

  4. [转]js函数式变成之函数柯里化

    本文转自:https://segmentfault.com/a/1190000003733107 函数柯里化是指参数逐渐求值的过程. 我觉得它是:降低通用性,提高专用性. 通常,柯里化是这样的过程,“ ...

  5. Java对象序列化文件追加对象的问题,以及Java的读取多个对象的问题解决方法。

    这几天做一个小的聊天项目用到对象序列化的知识,发现对象序列化不能像普通文件一样直接追加对象.每次写入对象都会被覆盖.弄了2个多小时终于解决了.Java默认的对象序列化是每次写入对象都会写入一点头ace ...

  6. Web学习之css

    CSS指层叠样式表(Cascading Style Sheets),CSS 是标准的布局语言,用来控制元素的尺寸.颜色.排版.CSS 由 W3C 发明,用来取代基于表格的布局.框架以及其他非标准的表现 ...

  7. cvBox2D和RotatedRect中返回的角度angle详解

    本文为作者原创,未经允许不得转载: 原文由作者发表在博客园: http://www.cnblogs.com/panxiaochun/p/5478555.html 关于cvBox2D和RotatedRe ...

  8. Luogu题目集合[6/未完待续]

    1. P1327数列排序 题目描述 给定一个数列{an},这个数列满足ai≠aj(i≠j),现在要求你把这个数列从小到大排序,每次允许你交换其中任意一对数,请问最少需要几次交换? 输入输出格式 输入格 ...

  9. PHP执行定时任务

    PHP执行定时任务 1.当PHP像文件写入信息的时候 <?php for ($i=0; $i < 10; $i++) { $str="我是第".$i."条&q ...

  10. 在ubuntu14.04设置静态ip

    打开网络的配置文件 sudo vim /etc/network/interfaces 选择网卡,我这里是有线网卡eth0,设置静态ip为192.168.1.108 auto eth0 iface et ...