突破自我,开源NetWorkSocket通讯组件
前言
在《化茧成蝶,开源NetWorkSocket通讯组件》发表之后,收到大家很多个star,在此感谢!更可贵的是,一些网友提出了许多好建议,经过一些时间的思考,决定将NetworkSocket从模仿MVC之后,继续模仿Owin,并局部突破,作有自己特色和理念的通讯框架。之所以模仿Owin而不是接入,是因为Open Web Interface for .NET是为Web而存在的,我需要的是应该是Open Tcp Interface for .NET,当然这是还不存在的标准,但我想达到或接近这种标准,服务器和通讯协议分离不耦合,通讯协议以中间件开发,对于想开发自定义协议的开发者,只要开发一个中间件就够了,对于一般使用者,想使用哪此功能,就Use相关的中间件就可以。
OTin思想
我把框架分为服务器和中间件两大部分,服务器监听连接、维护连接会话和收到会话请求时执行中间件,中间件是具体的执行单元,往往和某种协议有关系,或者说是某种协议实现的framework。NetworkSocket的http协议、websocket协议支持分别是HttpMiddleware和WebsocketMiddleware
namespace NetworkSocket
{
/// <summary>
/// 定义监听者的行为
/// </summary>
public interface IListener : IDisposable
{
/// <summary>
/// 使用中间件
/// </summary>
/// <param name="middleware">中间件</param>
void Use(IMiddleware middleware); /// <summary>
/// 开始启动监听
/// </summary>
/// <param name="port">端口</param>
void Start(int port);
}
}
IListener
namespace NetworkSocket
{
/// <summary>
/// 定义中间件的行为
/// </summary>
public interface IMiddleware
{
/// <summary>
/// 下一个中间件
/// </summary>
IMiddleware Next { set; } /// <summary>
/// 执行中间件
/// </summary>
/// <param name="context">上下文</param>
/// <returns></returns>
Task Invoke(IContenxt context);
}
}
IMiddleware
namespace NetworkSocket
{
/// <summary>
/// 定义Socket的上下文
/// </summary>
public interface IContenxt
{
/// <summary>
/// 获取当前会话对象
/// </summary>
ISession Session { get; } /// <summary>
/// 获取当前会话收到的历史数据
/// </summary>
IReceiveBuffer Buffer { get; } /// <summary>
/// 获取所有会话对象
/// </summary>
ISessionProvider AllSessions { get; }
}
}
IContenxt
其中最重要的就是三个接口,IListener负责生成IContenxt传递给IMiddleware执行。如果有多个IListener实现者,那么中间件也可以在这多个IListener实现者中运行。NetworkSocket原来支持的http等功能,虽然改为中间件形式实现了,但使用风格还是保持不变。这个正像支持 Owin的webApi开发和MVC4 WebApi开发风格上没什么大变化一样。而且原来一端口一协议的弊端现在也不存在了,单端口可以支持多协议,只要这些协议不冲突,现在,多协议的通讯变成了中间件的选择而已:
public class HomeController : HttpController
{
[HttpPost]
public ActionResult Index(User user, bool fAdmin = false)
{
return Json(new { state = true });
}
} public class FastMathService : FastApiService
{
[Api]
public int GetSum(int x, int y, int z)
{
return x + y + z;
}
} public class WebSocketSystemService : JsonWebSocketApiService
{
[Api]
public UserInfo[] SearchUsers(string name)
{
return new UserInfo[];
}
} var listener = new TcpListener();
listener.Use<HttpMiddleware>();
listener.Use<JsonWebSocketMiddleware>();
listener.Use<FastMiddleware>();
listener.Start();
如何使用
在这里我不想把NetworkSocket的功能贴出然后介绍有多Easy等等了,这显得没必要了。我精心了作了一个Demo,里面刚好是入门使用的介绍,功能全面而有趣。
重定义这个组件
现在,我想重新定义这个组件:
这是一个通讯服务和协议完全分离的框架,单端口允许多种通讯协议并存,除了内置的Http、WebSocket、Flex策略和Fast中间件,开发者还可以开发自己的中间件并安装到通讯服务
感谢你的阅读,如果对源代码感兴趣,可以上github提建议:https://github.com/xljiulang/NetworkSocket
突破自我,开源NetWorkSocket通讯组件的更多相关文章
- 开源NetWorkSocket通讯组件
开源NetWorkSocket通讯组件 前言 在<化茧成蝶,开源NetWorkSocket通讯组件>发表之后,收到大家很多个star,在此感谢!更可贵的是,一些网友提出了许多好建议,经 ...
- 化茧成蝶,开源NetWorkSocket通讯组件
前言 前后历时三年,期间大量参考.Net Framework和Asp.net MVC源代码,写写删删再重构,组件如今更新到V1.5.x了.从原来的丑小鸭,变成今天拥有稳定和强大的tcp协议支持基础层, ...
- 跨平台开源通讯组件elastic communication
elastic communication是基于c#开发支持.net和mono的通讯组件(简称EC),EC的主要目的简化mono和.net下的通讯开发难度,通过EC可以非常快速地开发基于mono和.n ...
- Net Core开源通讯组件 SmartRoute
Net Core开源通讯组件 SmartRoute(服务即集群) SmartRoute是基于Dotnet Core设计的可运行在linux和windows下的服务通讯组件,其设计理念是去中心化和零配置 ...
- 开源通讯组件ec
跨平台开源通讯组件elastic communication elastic communication是基于c#开发支持.net和mono的通讯组件(简称EC),EC的主要目的简化mono和.net ...
- [重磅开源] 比SingleR更适合的websocket 即时通讯组件---ImCore开源了
有感而发 为什么说 SignalR 不合适做 IM? IM 的特点必定是长连接,轮训的功能用不上. 因为它是双工通讯的设计,用hub.invoke发送命令给服务端处理业务,其他就和 ajax 差不多, ...
- .Net Core开源通讯组件 SmartRoute(服务即集群)
SmartRoute是基于Dotnet Core设计的可运行在linux和windows下的服务通讯组件,其设计理念是去中心化和零配置即可实现服务通讯集群.SmartRoute是通过消息订阅的机制实现 ...
- [开源] .NETCore websocket 即时通讯组件---ImCore
前言 ImCore 是一款 .NETCore 下利用 WebSocket 实现的简易.高性能.集群即时通讯组件,支持点对点通讯.群聊通讯.上线下线事件消息等众多实用性功能. 开源地址:https:// ...
- 多平台Client TCP通讯组件
Beetle.NetPackage是一个多平台Client Socket TCP通讯组件(Apache License 2.0),组件制统一的对象协议制定规则,可以灵活方便地通过对象来描述TCP通讯交 ...
随机推荐
- EF Power Tools的Reverse Engineer Code First逆向生成Model时处理计算字段
VS2013上使用EF Power Tools的Reverse Engineer Code First逆向生成Model时,没有处理计算字段.在保存实体时会出现错误. 可以通过修改Mapping.tt ...
- iOS同一项目多个Target的快速实现方法
之前写过这种场景下的项目,比如类似滴滴的司机端和乘客端,学生端和教师端等等.. 最近有人问我,就整理记录如下: 1.正常新建一个项目,完成后 如下: 2.这一步就是添加一个新的target 3.添加 ...
- shell脚本切割tomcat的日志文件
鉴于在调试logback和log4j的文件切割一直无法成功,随性用shell写个脚本用来切割tomcat下的日志文件(大家如果有在logback或log4j使用文件切割成功的话,可以留下使用方式,先谢 ...
- 王总QQ聊天对话
在吗? LeeYu 2015/11/10 9:37:11 在的,王总 王宁 2015/11/10 9:37:29 李伟,你今天把设备送到H3C吧. LeeYu 2015/11/10 9:37:43 行 ...
- 理解linux and inode
inode是一个重要概念,是理解Unix/Linux文件系统和硬盘储存的基础. 我觉得,理解inode,不仅有助于提高系统操作水平,还有助于体会Unix设计哲学,即如何把底层的复杂性抽象成一个简单概念 ...
- CentOS 7.2 安装 Docker 1.12.3 版
本文出自http://www.cnblogs.com/scoter2008 1.强大的官方文档 https://docs.docker.com/engine/installation/linux/ce ...
- AIR ANE(本机扩展)使用中的一些问题(Android平台)
关于如何写ANE,就不说了,用关键字,Android ANE 开发,会搜索到N多. 下面写一下碰到的问题,和一些别人可能没有说清的地方 1. 生成的ANE是直接拷到lib里使用吗?A:这个一定不要直接 ...
- 用U盘制作启动盘后空间变小的恢复方法,清除U盘启动盘空间
先把u盘插好,运行cmd, 输入diskpart,回车, (输入list disk,回车,能看到磁盘大致情况,u盘一般是磁盘1) 再输入select disk 1,回车, 再输入clean,回车, 关 ...
- SSH 整合及注意事项
Spring 整合 hibernate 配置 1. spring 配置管理datasource 及 sessionFactory 1) 引入相关jdbc配置文件. <context:proper ...
- C#基础---扩展方法的应用
最近对扩展方法比较感兴趣,就看了看资料,记录一下扩展方法的几种方法. 一. 扩展方法的基本使用: Note: 1. 扩展方法必须在静态类中, 2 扩展方法必须声明静态方法,3 扩展方法里面不能调用其 ...